- 16 April 2021 (138 messages)
-
Ого) а, если не секрет, Decimal у вас обусловлен необходимостью строго точного подсчета копеек? ...как вы думаете, кроме потенциальной ошибки из-за природы float, есть еще какие-то аргументы против float?)
Мне нужно много статистики вокруг цен. Decimal нормально работает во всех статистических функциях?) -
Мне крайне важна точность. У меня тоже вокруг цен статистика.
-
Спасибо :)
-
IntXX нужного размера копейками...
можно и float, но потом будут суммы не сходится... для примерных подсчётов ок -
Int64 с точностью до 8 знаков в зависимости от валюты
-
Привет. Не подскажете. В яндекс клауд расположен сервер кликхаус. После апдейта до 20.8 стали падать балк инсерты. Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = JSONException: JSON: begin >= end. (version 20.8.17.25 (official build)) (from [::ffff:78.36.43.77]:20435) (in query: INSERT INTO
-
Установил эту версию в докер и тот же код пашет ок по http интерфейсу. Проблема явно в https. Простые запросы исполняются ок.
-
Доброго времени суток.
Застрял в каком-то странном состоянии КХ, когда для system.columns в полях data_compressed_bytes и data_uncompressed_bytes фигурируют нули, несмотря на наличие данных.
Использую докер образы (docker 20.10.5, build 55c4c88) на ubunut 18.04, но думаю дело не в ней.
Первый раз заметил на докер образе yandex/clickhouse-server:21.1.9.41
При откате на yandex/clickhouse-server:20.3.13.127 все ок.
Подготовка данных и запрос выглядит одинаково:
https://yadi.sk/i/t2u1gBdNLDdd6g - поведение для 20.3.13.127
https://yadi.sk/i/TtPMtbCnKiXwYw - поведение для 21.1.9.41
Воспроизводится вроде стабильно при полной очистке докера(image, volume, контейнеров)
Нагуглить ничего не смог, по ченйджлогу https://clickhouse.tech/docs/en/whats-new/changelog/ тоже не видать.Screenshot 2021-04-16 at 23.17.45.pngView and download from Yandex.Disk
-
в system.parts посмотрите какой тип партов, скорее всего compact
-
-
Для компактных партов кх скорее всего не отображает размер колонок
-
так и есть
-
Да, дейстивтельно
"min_bytes_for_wide_part","10485760" стал теперь, а в “старой” версии 0 стоял.
Спасибо!
UPD https://github.com/ClickHouse/ClickHouse/pull/11913 откуда ноги ростут оказываетсяEnable compact parts by default for small parts by alexey-milovidov · Pull Request #11913 · ClickHouse/ClickHouseChangelog category (leave one): Performance Improvement Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Enable compact parts by default for small par...
-
ClickHouse/ClickHouse tagged: v21.4.4.30-stable
Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v21.4.4.30-stable
Release notes:
ClickHouse stable release v21.4.4.30-stableRelease v21.4.4.30-stable · ClickHouse/ClickHouseClickHouse stable release v21.4.4.30-stable
- 17 April 2021 (19 messages)
-
в Decimal храните деньги
SELECT toDecimal32(0.1,4) + toDecimal32(0.2,4), 0.1 + 0.2;
float не для денег в нем ошибки накапливаются есть локальные значения которые дают большую погрешность -
-
Тоже интересует вопрос.
-
-
-
Привет всем. Подскажите , какую агрегатную функцию использовать?
В таблицу заполняются данные по разным типам , у каждого типа свои поля, остальные заполняются как нулл. Как шахматная доска. Конфликтов нет. Создаю материалайз вью сгрупированные по общему полю. Мне необходимо из 4 строк получить одну, чтоб она была заполнена вся. Использую any(), но не знаю на сколько корректно. -
Support Apple m1 by changvvb · Pull Request #21639 · ClickHouse/ClickHouse
Support Apple m1 #20245 I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable shor...
-
Я использую anyLast, чтобы была возможность перетирать старые данные новыми
-
Спасибо🙏💕
-
делаю curl запрос
curl 'http://user:pwd@host?query=SELECT+COUNT(*)+FROM+db.table&send_progress_in_http_headers=1&wait_end_of_query=1' -v. `
* Trying <ip>...
* TCP_NODELAY set
* Connected to <host> (<ip>) port 8123 (#0)
* Server auth using Basic with user '<user>'
> GET /?query=SELECT+COUNT(*)+FROM+dt.table&send_progress_in_http_headers=1&wait_end_of_query=1 HTTP/1.1
> Host: <host>
> Authorization: Basic <auth>
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/tab-separated-values; charset=UTF-8
< Date: Sat, 17 Apr 2021 15:27:04 GMT
< X-Clickhouse-Query-Id: 1617CFB7F3C6B410
< X-Clickhouse-Server-Display-Name: <name>
< X-Clickhouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
< Content-Length: 8
<
1790220
* Connection #0 to host <host> left intact
* Closing connection 0
почему приходит пустой X-Clickhouse-Summary? -
Версия меньше чем 20.8?
-
да
-
Обновится надо. Наверное 20.3 у вас?
-
19.6)
-
Помню что что-то сломали к 20.2 из-за того что включили по умолчанию "процессоры" (https://github.com/ClickHouse/ClickHouse/commit/c683c77633cb7da404f5b23f7fa960d8ca3ff0a5). У вас видимо что-то другое.
-
Спасибо огромное всем, кто ответил про хранение цен :) ...помогите, пожалуйста, еще в одном - а каков будет правильный clickhouse-way для получения последней цены товара на дату?
Допустим, у меня простая таблица prices: date, shop_id, product_name, price.
1000 магазинов, даты получения цен разные.
Я хочу вывести для каждого товара только последнюю цену. Классические решения в других бд: join (не наш вариант? В память не влезет весь join огромной тсблицы), подзапрос. Подзапрос с сортировкой по дате? Это не медленно будет? ...или есть какой-то хитрый способ через group by? -
Argmax
-
Пошел читать) интересно)
-
В общем кликхаус источники тоже забагованы... "добрый вечер" блин...
https://github.com/ClickHouse/ClickHouse/issues/23236
всем на 20.8 назад... и конечно этот баг будет только в рантайме ) на этапе апгрейда оно не упадет.Wrong behavior in dictionaries when key columns are not the first in column order · Issue #23236 · ClickHouse/ClickHouse(you don't have to strictly follow this form) Describe the bug After upgrade to 21.3 below dictionaries stopped working properly (confirmed on layout hashed, Clickhouse and ODBC source). Al...
- 18 April 2021 (72 messages)
-
Кто может подсказать про интеграцию с MySQL (https://clickhouse.tech/docs/en/sql-reference/table-functions/mysql/) и как я могу послать native MYSQL запрос из ClickHouse когда нет аналога аналога на диалекте ClickHouse.
Прикладной пример таков: Нужно послать запрос сл вида (см ниже) когда индекс MySQL играет роль Full-Text-Search index:
select display_name from entity where match(display_name) against('+central +bank*' in boolean mode)mysql | ClickHouse Documentationmysql Allows SELECT and INSERT queries to be performed on data that is stored on a remote MySQL server. Syntax mysql('ho
-
пока через view на удаленном сервере.
и голосуем в этот тикет: https://github.com/ClickHouse/ClickHouse/issues/19320Add view function support to mysql/postgresql/odbc table functions. · Issue #19320 · ClickHouse/ClickHouseJust like in #12567 But for mysql, postgresql and odbc table functions. Use case Run arbitrary queries in external databases with support of their sql syntax and functions. Describe the solution yo...
-
подскажите пожалуйста самый простой способ перенести базу clickhouse с одного своего сервера на другой?
-
INSERT INTO.. SELECT FROM Remote...
-
Ну, или как вариант, добавить новую реплику, подождать, пока оно доедет и удалить старую..
-
А папку с данными перенести если?)
-
Остановив сервер предварительно.
-
Если он всего 1)
-
Joined.
-
да, сервер один) как найти эту папку?
-
-
Zaur, я недавно в экосистеме ClickHouse ...я пробовал переносить папку между разделами диска - и все было успешно. Лучший-правильный вариант тот, что написали выше...
Папка по умолчанию (если не меняли параметр <path> в /etc/clickhouse-server/config.xml):
/var/lib/clickhouse
По идее, можно её целиком )) ...сами данные там лежат в подпапках: data, dictionaries_lib, metadata, metadata_dropped, preprocessed_configs, store. И файл status ) ...и доступы - после перемещения/копирования владелец чтобы был clickhouse:clickhouse ) ...обязательно остановить сервер (systemctl stop clickhouse-server) перед этими манипуляциями )
У меня работало... ) -
понял, спасибо
-
Ого, у smi2'ого php-клиента https://packagist.org/packages/smi2/phpClickHouse почти 1млн инсталлов )) круто ))
Я начал с mysql-интерфейса, но... стало интересно, как получить значение кол-во строк результата, если есть limit ... . Понял, что можно или format json ... или вот, похоже, в smi2/phpClickHouse есть уже готовые функции для получения этой цифры ... и вполне привычный способ перебора строк результатов )
блин, как же все прикольно )smi2/phpclickhouse - PackagistPHP ClickHouse Client
-
Спасибо но как я смогу через view подставить парамер который пойдет в "match(display_name) against('+central +bank*' in boolean mode)” ?
-
в лоб сложно, но по извращаться вроде можно https://stackoverflow.com/a/5331792
но это не точно, я в мускл не силен
вообще в таких сложных случаях лучше делать это на стороне приложения (брать с мускл - вставлять в КХ) -
Не могу ссылку найти, но читал на днях, как уже выше тут написали, - полнотекстовый поиск запускают в Apache Spark, получают id записей и отдают их в ClickHouse. Из приложения 2 запроса - первый в спарк, второй в КХ. В итоге за доли секунд получается ценный результат :)
У вас mysql вместо spark, но логика решения та же) -
А вообще, КХ поддерживает рег.выражения :) если вам не нужен именно полнотекстовый поиск с оценкой релевантности, то можно переписать запрос с рег.выражениями в where) и уйти от mysql
-
Коллеги, приветствую.
1. Используете поля Nested? Джойните эти nested-поля в выборках?
Сколько записей у вас в таблице, сколько в nested-поле дочерних записей?
2. Задача хранить данные о деталях (в кол-ве под 200 млн.) в таблице wide_part и в nested-поле комплектующие детали (десяток полей, из чего состоит деталь). Комплектующих детали может быть до 500 штук. Страшные цифры если перемножить средние значения. И планируются другие Nested-поля по заказам, в агрегированном виде.
Запрос с агрегацией(sum,min,avg...) на эти 200 млн и джойном на nested-array выдержит? Или надо подход с нестед-ами в КХ пересматривать? -
Выдержит. Вы же не будете доставать все детали. В итоге джойн произойдёт только для тех деталей, которые вы будете доставать.
-
Если данных в мускуле много, а запросы сложнее достать по ключу значение, то наверно лучше посмотреть в сторону движка mysql mat view. Он правда ещё экспериментальный, но в кликхаусе поиск лайком один фиг должен отработать быстрее, чем специализированный индекс в мускуле.
-
Спасибо, Владимир. 🤝
Если я агрегирую детали по поступлению за месяц, то и внутри нестедов придется агрегировать.
Не исключено, что и GROUP BY придется делать по внутреннему полю нестеда.
Будем думать😐 -
Посмотрите на SummingMergeTree в нем в том числе и вложенные структуры агрегируются
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/summingmergetree/#agg_function-sumSummingMergeTree | Документация ClickHouseSummingMergeTree Движок наследует функциональность MergeTree. Отличие заключается в том, что для таблиц SummingMergeTree
-
Всем привет!
В таблице лежат координаты, необходимо сделать группировку по странам. Как лучше это сделать через clickhouse (может через подключение словарей)? -
Читайте про полигоны, и полигональные словари
-
спасибо!
-
А может есть в открытом доступе словари с городами? Интересен мир. (не нужна детализация сильная по РФ и тд)
-
В готовом видео для кх думаю нет, нужно делать из полигонов какого нибудь openstreetmap
-
Понял, спасибо большое, очень помогли!
-
Спасибо у нас плохой опыт создания своего Full Text Search Index on Clickhouse using filters out stopwords, lowers case, ignores possessive endings, and applied Porter’s stemming 🙂
-
На наших объемах очень тяжело
-
спасибо
-
да спасибо это получаеться очень сложно делать Query через Spark и внутри делать JOIN между двумя DATASETS
-
если у вас раз в месяц придётся что-то аггрегировать за месяц, то всё выдержит. если постоянно, то лучше начинать агрегировать по мере поступления данных благодаря AggregatingMergeTree и MaterializedView.
>Не исключено, что и GROUP BY придется делать по внутреннему полю нестеда.
если это поле общее для всех деталей, то его можно вынести на уровень выше (в мат вью) и также начать агрегировать по мере поступления данных. -
Привет. Подскажите в чем может быть причина. Создал простенькую materialize view для агрегаций по id. При создании создается и таблица пересчитывается нормально, а при добавлении новых полей, агрегация по id не происходит, происходит просто добавление нового поля
-
-
-
попробуйте для начала optimize final.
>а при добавлении новых полей
добавляете новые поля в таблицу или пересоздаёте мат вью с новыми полями или добавляете новые поля в мат вью без пересоздания? -
Добавляю новые поля в таблицу, не в мат вью.
-
но ожидаете изменений в матвью?
-
Да, как я понял он при инсерте должен агрегировать данные и изменять во мат вью
-
-
нет не так, магии нету. матвью не может знать что делать с новой колонкой, брать от неё минимум или максимум или использовать как часть составного ключа
-
Хм. А как посоветуйте мне сделать?
-
-
-
ну вот, а говорят "здесь нету экстрасенсов, покажите ваш запрос" :)
-
тогда:
>попробуйте для начала optimize final. -
Я отошел от компа, чуть позже попробую. Спасибо за совет
-
-
строки могут сворачивать не сразу или вообще не свернуться, ищите по чату "сворачивание", уже много раз обсуждали. и читайте чаще документацию, там уже есть инфа на 99% вопросов
-
Здравствуйте. Систематически получаю вот эту ошибку на кластере CH из двух реплик, текущая версия 21.3.4.25 В чем может быть причина? https://github.com/ClickHouse/ClickHouse/issues/2025921.2 DB::Exception: Incomplete granules are not allowed while blocks are granules size · Issue #20259 · ClickHouse/ClickHouse
I ran an optimize on 21.2, and the merge kept failing. 2021.02.09 14:38:06.519295 [ 14569 ] {} <Trace> db.table: Executing log entry to merge parts all_0_91343_4396, all_91344_91581_5...
-
у вас что стоит в can_use_adaptive_granularity?
https://github.com/ClickHouse/ClickHouse/commit/121c5c96053ca07cdc9eca1f9458022400df3e22
у вас данные мержатся с разной гранулярностью видимо из старых версий...Merge pull request #20279 from ClickHouse/relax_check_in_data_writer · ClickHouse/ClickHouse@121c5c9Relax check in data writer for non adaptive tables
-
enable_mixed_granularity_parts стоит в 1
-
Да, после этого все нормально
-
-
можно попробовать в 0 поставить
а много clickhouse со старых версий апгрейдили? -
-
Версия и подробнее
-
-
-
-
-
-
-
-
-
select sale_date, count() as sales
FROM
(
select * from trend_reports tr where tr.sale_date >='2021-04-01' and tr.sale_date <'2021-05-01' and tr.sale_date <> '2021-04-01'
)
group by sale_date
order by sale_date
- пусто. то же самое при условиях sale_date !='2021-04-01' или and not(sale_date='2021-04-01') -
-
select sale_date, count() as sales
FROM
(
select * from trend_reports tr where tr.sale_date >='2021-04-01' and tr.sale_date <'2021-05-01' and (tr.sale_date < '2021-04-01' or tr.sale_date > '2021-04-01')
)
group by sale_date
order by sale_date
- возвращает все кроме 1го числа - как и должно -
Для уменьшения объема агрегируемой таблицы и ускорения агрегации. Всяко быстрее, чем считать по исходной таблице же.
-
в документации (которую никогда не лишне почитать) написано, что стоит использовать "в том случае, когда это уменьшает количество строк на порядки", например, у вас есть все логи nginx и мат вью с группировкой по домену. в итоге вы можете получить дешёвые счётчики и вместо миллионов/миллиардов записей, вы можете достать жалкие десятки уже предагрегированных записей и доагрегировать их используя те же агрегатные функции что и в мат вью или даже гораздо проще - добавив FINAL после названия таблицы. такой подход позволяет быстро рассчитывать ваши типовые агрегации и при этом на диске они не занимают много места. более того, многие даже не хранят сырые данные, а только агрегации, сильно снижает потребляемое место на диске и нагрузку на него
- 19 April 2021 (227 messages)
-
-
а можете точный запрос привести в котором у вас no (sale_date = '2021-04-01') перестал работать?
-
-
Всем привет, если на кластере стоят опции
insert_quorum и insert_quorum_parallel
есть ли смысл синхронного инсерта? (insert_distributed_sync) -
Всем привет!
не нашел в документации оконнных функций, предполагаю что нужно делать как то по другому? Подскажите куда копать
1. Есть поле datetime которое входит в primary key. Записи жестко появляются каждые 15 минут каждого часа. Секунды всегда 00. то есть 00:00:00, 00:15:00, 00:30:00, 00:45:00, 01:00:00 и тд. Иногда все же какой то записи нет (например не пришла 00:30:00), и ее надо реконструировать. Как обнаружить такую дырку/пропуск? Куда копать?
2. Как корректно вычислить разницу в поле между двумя соседними записями отсортированными по дате? Искал в чате, говорят про функцию neigbour, при этом не рекомендуют ей пользоваться. Для каждой записи, в поле val у меня хранится значение аккумулятора, и надо найти изменение аккумулятора которое произошло за 15 минут (между двумя соседними записями). Куда копать, подскажите пзл.
Спасибо -
1) ORDER BY ... WITH FILL ... https://clickhouse.tech/docs/en/sql-reference/statements/select/order-by/#orderby-with-fill
2) https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/01591_window_functions.sql#L356
если я правильно понял суть вопросаORDER BY | ClickHouse DocumentationORDER BY Clause The ORDER BY clause contains a list of expressions, which can each be attributed with DESC (descending)
-
-
сначала вычисляешь lag
потом разницу между lag и текущим значением -
Эта фича уже рекомендована к использованию?
-
This is an experimental feature that is currently in development and is not ready
for general use. It will change in unpredictable backwards-incompatible ways in
the future releases. -
-
мы используем neighbor
-
но надо понимать ее ограничения
-
по блокам и т.п.
-
-
отфильтровывайте через where или помечайте такие места
-
-
Да все ок там
-
Привет! Помогите с вопросом .
Есть OLTP БД, в ней есть большая таблица фактов "трансфера", к ним привязана таблица с доп атрибутами (transfer_id, attr_name, attr_value).
Внимание вопрос - могу ли я эту структуру положить в clickhouse в одну таблицу с полем типа Map ?
К сожалению функции groupMap (аля groupArray) нет.
Или как тут быть?
Под конкретный отчет я могу flattern и вытащить нужные атрибуты, но есть желание, чтобы было более универсальное хранилище. -
Добрый день! Нам необходимо чтобы пароли пользователей КХ не лежали в явном виде в конфигах. И не передавались в явном виде по http. Это можно как-то решить?
-
или несколько groupArray, либо groupArray с туплом
-
так в конфиге можно хеши хранить. И передавть по http не в урле.
-
Александр, там можно еще и Kerberos подключить
-
храните пароли как sha256
https://clickhouse.tech/docs/en/operations/settings/settings-users/#user-namepassword
и передавайте пароли по HTTPS
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#server_configuration_parameters-opensslUser Settings | ClickHouse DocumentationUser Settings The users section of the user.xml configuration file contains user settings. Information ClickHouse also s
-
Спасибо!
-
да, наверное groupArray с туплом, попробую еще функцию навернуть сверху, чтобы по имени атрибута доставать value
-
Зачем? Просто .номер_элемента_тупла
-
я же не знаю в каком элементе array будет нужный атрибут
-
У дистрибьютид таблицы в очереди надо удалить/переложить bin файлы. Это отложенные инсерты
-
Нашёл более раннее обсуждение этой проблемы. Это баг версии 20.8.
Вопрос: а есть какая-нибудь возможность узнать объём Join таблицы в 20.8? -
Здравствуйте, у меня был кейс что накопилось bin файлов 30 миллионов. Я прописал user password в конфиге кластера. Сейчас инсерты пошли и число bin файлов уменьшается. Но встала репликация на других таблицах, которые не view.
-
Какие симптомы у "встала" и при чем тут вью?
-
с view проблемы начались, что там инсерты не отправлялись, это решили, появилась новая проблема.
таблицы ENGINE = ReplicatedMergeTree сейчас отстают на ноде с которой инсерты пошли -
ClickHouse: Replication lag across all tables
2021-04-19 11:30:35 6d 22h 26m -
Distributed таблица это не вью. Select * from system.replication_queue
-
я плохо объяснил.
работали год, проблем с репликацией replicated таблиц не было. были ошибки авторизации между нодами и копились bin файлы, рестарт ноды занимал 8 часов.
Как только я прописал авторизацию для distributed таблиц, появился лаг репликации по заббиксу. -
-
SELECT
database,
table,
type,
any(last_exception),
any(postpone_reason),
max(last_attempt_time),
max(last_postpone_time),
max(num_postponed) AS max_postponed,
max(num_tries) AS max_tries,
min(num_tries) AS min_tries,
countIf(last_exception != '') AS count_err,
countIf(num_postponed > 0) AS count_postponed,
countIf(is_currently_executing) AS count_executing,
count() AS count_all
FROM system.replication_queue
GROUP BY
database,
table,
type
order by count_all desc -
Нет
-
-
-
-
-
select sale_date, count() as sales
FROM
(
select * from trend_reports tr where tr.sale_date >='2021-04-01' and tr.sale_date <'2021-05-01' and tr.sale_date <> '2021-04-01'
)
group by sale_date
order by sale_date
- пусто. то же самое при условиях sale_date !='2021-04-01' или and not(sale_date='2021-04-01') -
-
select sale_date, count() as sales
FROM
(
select * from trend_reports tr where tr.sale_date >='2021-04-01' and tr.sale_date <'2021-05-01' and (tr.sale_date < '2021-04-01' or tr.sale_date > '2021-04-01')
)
group by sale_date
order by sale_date
- возвращает все кроме 1го числа - как и должно -
-
так проблема неделю назад началась?
типа уже неделю парты качает │ data │ participants_log │ GET_PART | 2021-04-12 13:51:12 │ 1970-01-01 03:00:00
попробуйте рестартовать КХ, похоже фетч завис -
а тип у поля? что partition by / order by ? skip index есть?
-
-
-
-
-
-
А почему этот запрос должен возвращать не 1ое? Там же написано в скобках "все, кроме 1го", а потом вы делаете отрицание .. НЕ ("все кроме 1го") = как раз 1ое число ) все правильно )
-
-
-
-
А на других датах?))
-
-
-
-
ну да примерно неделя. сейчас не хочу рестартить, пусть закончит еще 15млн инсертов. Тогда рестартую. спасибо.
-
Кстати, а КХ даты ведь не строками хранит, верно? И в таких условиях происходит какое-то неявное преобразование, верно? ...попробуйте ради прикола
where toUnixTimestamp(sale_date)<> toUnixTimestamp('2021-04-01')
Интересно уже просто :) -
toUnixTimestamp уж точно отдает UInt и если там не сработает <> значит дело в чем-то еще, а не датах
-
-
а toDate что возвращает?) Я не нашел в документации сходу) там есть toDate, но не ясен тип данных, который он возвращает) UInt32?
-
-
-
господа, как выдать юзеру доступ ко всем схемам и таблицам базы данных?
не могу нагуглить( -
GRANT ALL ON *.* TO <user> WITH GRANT OPTION
-
подскажите пожалуйста, почему может пропадать коннект при подключении http handler? Беру кусок настроек из примера, вставляю в config.xml, перезагружаю сервер кликхауса и получаю Code: 210. DB::NetException: Connection refused (localhost:9000). Настройки такие:
<http_handlers>
<rule>
<url><![CDATA[/query_param_with_url/\w+/(?P<name_1>[^/]+)(/(?P<name_2>[^/]+))?]]></url>
<method>GET</method>
<headers>
<XXX>TEST_HEADER_VALUE</XXX>
<PARAMS_XXX><![CDATA[(?P<name_1>[^/]+)(/(?P<name_2>[^/]+))?]]></PARAMS_XXX>
</headers>
<handler>
<type>predefined_query_handler</type>
<query>SELECT value FROM system.settings WHERE name = {name_1:String}</query>
<query>SELECT name, value FROM system.settings WHERE name = {name_2:String}</query>
</handler>
</rule>
</http_handlers>
Убираю настройки, перезапускаю сервак и снова могу коннектиться. Думал дело в версии. Обновился до последней и всё равно такая же проблема. Подскажите, что не так делаю? -
баг, я завел
-
Wrong query result with != · Issue #23305 · ClickHouse/ClickHouse
21.5.1 create table test(d Date, k Int64, s String) Engine=MergeTree partition by (toYYYYMM(d),k) order by (d, k) insert into test values ('2020-01-01', 1, ''); inse...
-
имхо проблема в partition pruning
-
спасибо!
-
точно?
-
ну 21.3.4.25 - проблема есть
-
у меня и в 20.12.8 есть, может добавили в минорных
-
скажите, а в описании шардов кластера в config.xml и в конфигах словарей также доступен тег password_sha256_hex, вместо password?
-
ещё раз спасибо. а как сделать тоже самое, но с помощью оконных функций. запрос через массивы не получилось впихнуть в концепцию метабейза. есть шансы, что с оконными функциями прокатит.
-
а так работает.
SELECT * FROM default.test WHERE toDate(d) <> '2020-01-01';
ну логично, засада в toYYYYMM.
думаю он начинает сравнивать строку "202001" а не даты... -
В логе такая ошибка: 2021.04.19 12:38:25.519834 [ 37065 ] {251e4250-d4dd-42d5-b14e-5e2d86464089} <Error> DynamicQueryHandler: Code: 491, e.displayText() = DB::Exception: URL "::1:9000" is not allowed in config.
-
😈
-
и при использовании NOT IN pruning не работает... (читает все парты, но он и раньше не работал). минное поле
-
SELECT * FROM test WHERE d != materialize(toDate('2020-01-01')) ;
https://github.com/ClickHouse/ClickHouse/pull/21550Shard pruning via literals by amosbird · Pull Request #21550 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): Bug Fix Changelog entry (a user-readable short description of the changes...
-
в конфигах словарей нет
большинство внешних источников требуют пароля в открытом виде на вход
в remote_servers есть
<secret>
https://github.com/ClickHouse/ClickHouse/pull/13156/files
https://clickhouse.tech/docs/en/engines/table-engines/special/distributed/
и тогда при SELECT будет использован тот же пользователь который делает запрос на ноде инициатореSecure inter-cluster query execution (with initial_user as current query user) [v3] by azat · Pull Request #13156 · ClickHouse/ClickHouseChangelog category (leave one): New Feature Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Secure inter-cluster query execution (with initial_user a...
-
ещё вопрос. допустим я решу сделать простую фичу https://github.com/ClickHouse/ClickHouse/issues/20865
кликхаус будет долго компилироваться? у меня i9 и 64gb ramReplacingMergeTree does not support DateTime64 as ver · Issue #20865 · ClickHouse/ClickHouseCREATE TABLE testR ( `A` Int64, `D` DateTime64(9), `S` String ) ENGINE = ReplacingMergeTree(D) ORDER BY A Received exception from server (version 21.3.1): DB::Exception: The column D cannot be used...
-
Всем привет! Подскажите пожалуйста, что тут делать. Это селект из system.distribution_queue, на один из шардов на одну из таблиц очередь растет и не понятно, как ее рассосать.
Остальные таблицы на этом же шарде наполняются. И все таблицы другого шарда, который лежит на той же железке, норм работают. Началось после того, как на этй железке закончилось место. Место почистили, а проблема осталась -
минут 30, на ноуте у меня 2 часа компиляется
-
а может не надо так:
>> Read 2 rows, -
в смысле?
-
>SELECT * FROM default.test WHERE toDate(d) != toDate('2020-01-01') ;
так - прунинг работает - read 1 rows -
> SELECT * FROM test WHERE d != materialize(toDate('2020-01-01')) ;
а так не работает (читает все партишны) -
Добрый день, подскажите пож-та.
Есть след sql.
ALTER TABLE table_name Add COLUMN column_name DateTime DEFAULT now();
Сейчас данные в колонке column_name считаются на лету, для каждого селекта.
Не понятно, как сделать, чтоб значение колонки рассчитывалось только 1 раз? Во время вставки.
Гугл не дал результатов, по этому решил попробывать тут. -
ну естественно. Прунинг работает до выполнения запроса, а materialize создает колонку в рантайме
-
так и есть для новых строк, во время вставки
для старых alter table update column_name = column_name where 1 -
а ну ок, я думал мы workaround придумываем... самое обидное - я всем строго настрого запретил использовать toDate(partcol) op values синтаксис ввиду того что он может сломаться... а именно он не сломался...
-
удивительно что раньше не нашли. Сломано давно.
-
ответ в логе КХ.
-
нельзя. В этом случае сервер кликхауза играет роль клиента, ему нужен пароль.
-
я тоже надеялся, но кроме редких ConnectionPoolWithFailover: Connection failed at try №1 (по чуть-чуть на все хосты) и таких же редких уопминаний синтаксических ошибок в sql запросах, ничего нет
-
можно попробовать flush distributed и тогда либо пойдет, либо лог засрется ошибками и искать будет проще
-
Я поставил 20.8.17.25 себе на прод (если кому интересно). (не Альтинити конечно, там у меня нету прода)
Денни одобряе. короче -
у нас иногда distributed умирал сам по себе из за мелких ошибок и без start/stop distributed sends не восстанавливались... пришлось съехать с него (ну помимо прочего съехали ещё чтобы не было двойной записи на диск)
-
> для старых alter table update column_name = column_name where 1
А можно подробнее? Это решение помогло, хотелось бы понять как? -
-
спасибо, попробуем!
-
главное не забыть выключить ТТЛ )
-
КХ не перезаписывает старые данные при alter table column default.
alter перезаписал -
да я и не планировал использовать TTL
-
Понял, спасибо
-
да на каждом, либо on cluster
-
спасибо
-
А что с TTL на 20.8?
-
хм. интересно. select sale_date, count() as sales
FROM
(
select * from trend_reports tr where tr.sale_date >='2021-04-01' and tr.sale_date <'2021-05-01' and toDate(tr.sale_date) <> '2021-04-01'
)
group by sale_date
order by sale_date
- работает. хотя sale_date и есть Date по типу -
-
TTL работает на основе метаинформации в партах. В каждом парте хранится файлик minmaxTTL в файлике лежит дата когда его надо процессить. Этот файлик создается при создании парта (т.е. при инсерте и мерже).
Изначальное поведение было что при alter table modify ttl в старых партах этот файлик не создавался и TTL не работал для старых партов. После многочисленный просьб это починили, теперь при alter table modify ttl КХ начинает усиленно читать все парты чтобы создать этот файлик, это не нравится другим просителям, но есть настройка -
-
-
SELECT (x / s) * 100
FROM
(
SELECT
x,
any(x) OVER (ORDER BY x DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS s
FROM
(
SELECT number AS x
FROM numbers(10)
)
)
┌─multiply(divide(x, s), 100)─┐
│ 100 │
│ 88.88888888888889 │
│ 77.77777777777779 │
│ 66.66666666666666 │
│ 55.55555555555556 │
│ 44.44444444444444 │
│ 33.33333333333333 │
│ 22.22222222222222 │
│ 11.11111111111111 │
│ 0 │
└─────────────────────────────┘ -
Спасибо. Это кое-что прояснило. :)
-
Всем привет, наверняка все читали эту статью https://blog.cloudflare.com/http-analytics-for-6m-requests-per-second-using-clickhouse/ такой вопрос,
в разделе Aggregations schema design #2 они говорят, что sumMap помог им уменьшить кол-во записей, как я понимаю они выделяют изменения в колонки, допустим statusCodeMap Nested (Status Int32, Count UInt64) и используют summing merge tree для агрегаций,
Вопрос в том, как они потом пересекают изменения, если скажем, нужно посчитать количество статусов 200, и страны RUHTTP Analytics for 6M requests per second using ClickHouseOne of our large scale data infrastructure challenges here at Cloudflare is around providing HTTP traffic analytics to our customers. HTTP Analytics is available to all our customers via two options:
-
DJ же показал другой WA
SELECT * FROM test WHERE toDate(d) != '2020-01-01'; -
Потому что в разделе аналитики в cloudflare можно объединять фильтры через AND
-
ну очевидно что страна как поле (дименшин)
-
да - я просто проверил на моем запросе. (в моем случае задуман как первая половина WHERE отрезает нужную партицию). щас еще один вариант попробую
-
ребят
есть запрос вида
select date, sum(amount) from table group by date
как сделать так, что бы еще сюда добавилась аккумулирующая сумма по дням ?
select date, sum(amount), runningAccumulate? from table group by date -
ну хорошо, мы получим,
countryMap Nested (count FixedString(2), Count UInt64),
statusCodeMap Nested (status Int32, Count UInt64)
но это будут два независимых счетчика, которые могут внутри себя пересекаться -
нет.
.
.
.
country Int8,
statusCodeMap Nested (status Int32, Count UInt64)
order by ,, ,,,, country, -
select sale_date, count() as sales
FROM
(
select * FROM
(
select * from trend_reports tr where tr.sale_date >='2021-04-01' and tr.sale_date <'2021-05-01'
)
where toDate(sale_date) <>'2021-04-01'
)
group by sale_date
order by sale_date
так работает. без toDate - не работает. но при этом первый запрос по идее уже возвращает временную таблицу - по идее без партиций. то есть не похоже что партицирование через toYYYYMM тут влияет. повторю - sale_date сама по себе типа Date -
А почему имеено страну выделять в дименшн? Ну и как решать что идет в колонку, а что в мап, там же еще десятки дименшнов
-
да проталкивается предикат внутрь. все вообще не так работает.
-
вообще я всем рекомендую только подобные конструкции... все остальное будет баги давать, и не только в КХ
(
(partitionKey>=lowerBound and partitionKey<higherBound)
OR (partitionKey>=lowerBound and partitionKey<higherBound)
OR (partitionKey>=lowerBound and partitionKey<higherBound)
)
соответственно lowerBound/higherBound должны быть правильного типа... -
ну они просто один из дименшинов засунули в map и таким образом сократили кол-во строк в 10 раз
-
то есть колонку с самым большим cardinality? Вы уверены? Что-то как-то слишком просто)
-
Ну и из статьи этого не очень понять
-
Да - проверил на другой таблице. если поле даты не участвует в ключе партиции то sales_period <> '2021-02-28' работает как положено
-
Либо может быть эта статья описывает какую-то другую аналитику, где нельзя фильтровать
-
-
слишком жирные строки тоже не стоит делать, ни к чему хорошему это не приведет. Получится что запросы которым нужен кусок мапы будут медленнее
-
Понял, возможно так и есть, там речь идет еще о том, что они хотят хранить сырые данные месяц, и похоже что там где можно фильтровать - месяц данных доступен
-
тогда все сходится
-
Благодарю, но еще посмотрю)
-
это баг вообще
-
ага :) но весело мне было когда тренды в базе начали слетать и никаких ошибок в логах :)
-
вот тут похожее есть https://youtu.be/efRryvtKlq0ClickHouse тормозит / Кирилл Шваков (TrafficStars)
Приглашаем на Saint HighLoad ++ 2021 20 и 21 сентября 2021, Санкт-Петербург, DESIGN DISTRICT DAA in SPB Программа, билеты и подробности - https://clck.ru/VmKaW -------- HighLoad++ Moscow 2018 Тезисы и презентация: http://www.highload.ru/moscow/2018/abstracts/4288 Практическое руководство по созданию неэффективных решений при помощи СУБД ClickHouse. -------- Нашли ошибку в видео? Пишите нам на support@ontico.ru
-
надо на стейдже такое ловить.
у меня автотесты бегают 6 месяцев, потом прод.
https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aissue+is%3Aopen+%22wrong+result%22 -
-
ну 21.3 только вчера вышел...
https://coub.com/view/qmjs -
Спасибо, гляну
-
ну обновлятся не надо... есть процедура неформальная... в чатике спрашивать у уважаемых людей а не падало ли у них чего при переходе =)
-
вообще в КХ если чего-то нового не собираетесь пользовать - можете не обновлятся
-
? у меня штатное обновление через депозиторий поставило 21.4.3.21 12-го апреля
-
ну вы вообще бессмертный =) (про "вчера" - это образно, означает не так давно)
-
ну обновлятся не надо... есть процедура неформальная... в чатике спрашивать у уважаемых людей а не падало ли у них чего при переходе =)
вообще в КХ если чего-то нового не собираетесь пользовать - можете не обновлятся
- Спасибо, так видимо и сделаю :) просто у меня на продах почти весь софт обновляется регулярно автоматом.. выключу-ка я КХ обновление спокойствия ради :) -
21.3.4.хх - пока третья цифра не перешагнет порог в 6-7, прод лучше не трогать... только стейдж
-
6 месяцев я тестирую новую версию КХ, которую планирую поставить в прод в будущем. Вот только что поставил - 20.8 (в прод).
все что старше 20.12 у меня или не заводится или нашлись ужасные баги (на стейдже).
Поэтому я на стейдж тестирую 20.12. -
-
есть даже два способа
-
toUnixTimestamp64Nano
-
внезапно. спасибо
-
SELECT reinterpret(now64(9), 'UInt64')
┌─reinterpret(now64(9), 'UInt64')─┐
│ 1618839190848570050 │
└─────────────────────────────────┘
SELECT toUnixTimestamp64Nano(now64(9))
┌─toUnixTimestamp64Nano(now64(9))─┐
│ 1618839224093127646 │
└─────────────────────────────────┘ -
-
нет, никакой связи.
размер в ГБ скорее и время жизни данных -
а по ГБ куда ориентироваться?
-
-
-
150 ГБ -- стандратный макс размер парта. Если у партиция размеров 900 ГБ, то в любом случае 6 партов, можно например недельные партиции сделать.
От запросов зависит. У меня есть таска, там данные надо 2 недели хранить и данные запрашиваются за последние пол-часа, поэтму партиции по часу -
Добрый день! У меня 2 млн записей c логами nginx-а в таблице и при этом размер папки clickhouse весить около 2.5GB
Подскажите пожалуйста это не большой размер для столько записей? -
спасибо)
-
наверняка у вас логами в базе system все занято
https://kb.altinity.com/altinity-kb-useful-queries/altinity-kb-database-size-table-column-size -
-
Спасибо! А я могу удалить всё из таблицы логов?
-
по второй ссылке идите
-
спасибо!
-
Добрый день коллеги! Есть проблема при выполнении запроса с двумя и более джойнами .Проблема появилась после обновление с 20.4.х.х на 20.8.х.х
Пример запроса выдуманный , но проблему отражает.Если в запросе участвуют колонки на кириллице то получаю проблему.
```select t1.номер 1, t2.номер 2,t3.номер 3
from (select number as номер 1 from numbers(100)) as t1
any
left join (select number as номер 2 from numbers(100)) as t2
on t1.номер 1 = t2.номер 2
any
left join (select number as номер 3 from numbers(100)) as t3
on t2.номер 2 = t3.`номер 3```
Очень прошу помощи! Спасибо -
select t1.`номер 1`, t2.`номер 2`,`t3`.`номер 3`
from (select number as `номер 1` from numbers(100)) as `t1`
any
left join (select number as `номер 2` from numbers(100)) as `t2`
on t1.`номер 1` = t2.`номер 2`
any
left join (select number as `номер 3` from numbers(100)) as `t3`
on t2.`номер 2` = t3.`номер 3 -
ошибка у вас на скриншоте из 21.1.6 а не из 20.8
попробуйте
EXPLAIN AST SELECT ...
EXPLAIN SYNTAX SELECT ... -
да я начал проверять с 20.8
-
20.8, 20.11,21.1,21.2 нигде не работает
-
в общем при JOIN там запросы переписываются
и если имена столбцов русские. то действительно могут быть баги
думаю имеет смысл ISSUE завести
с результатами EXPLAIN SYNTAX и EXPLAIN AST -
Баг уже есть ,но там молчание
-
С одним джойном все хорошо, если больше то падает
-
Добрый день. Использую clickhouse-driver(0.2.0) для загрузки данных в базу, находящуюся в yandex.cloud. Данные - датафрейм на 16кк строк, преобразованный в dict. Использую метод execute и INSERT INTO ... VALUES .При выполнении с локального компа(Windows) все отлично, но при запуске того же кода из кубера (контейнер с Linux) время выполнения увеличивается в разы. На что можно грешить и как исправить ситуацию?
-
контейнер то скольким кол-вом CPU запущен?
там же не железо... там зависит от того сколько вашего железа в CPU вам в контейнере нарезали -
CPU 5, Memory 20 Gi
-
можете подсказать правила оформления багов на гитхаб? может есть какие-то рекомендации? язык? структура бага?
-
там шаблон готовый при открытии уже встроен
-
Спасибо!
-
язык английский =)
очень помогают SQL запрос
и результат запроса на версии Clickhouse которые работают и версия Clickhouse где не работает
и сообщение об ошибке с полным stacktrace =) -
а на русском нельзя? проблемы с английским есть некоторые...
-
тогда на русском пишите, поймут
вы EXPLAIN AST \ EXPLAIN SYNTAX сделайте в 20.4 где работает и 20.5 где не работает -
EXPLAIN на сколько помню в 20.8 ввели вроде
-
Размер - 100 млн. записей.
Engine= MergeTree - да
Explain в datagrip не работает, а доступа к серверу ch по ssh для clickhouse-client нет :(
И не совсем понимаю это тайм-аут на клиенте (datagrip) или у сервера.
Увеличивал значения в 10 раз - https://prnt.sc/11phmh1 и ничего.
Может, это не те тайм-ауты, или, действительно, тайм-ауты на сервере -
ну там еще можно
SET send_logs_level='trace';
сделать и логи приложить -
в ошибке что написано? точное сообщение
-
вот так https://prnt.sc/11pi66hScreenshot
Captured with Lightshot
-
А времени действительно много проходит перед возникновением ошибки?
-
На 30 секундах возникает ошибка
-
в advanced настройках таймауты настройте
-
ок, буду пробовать все таймауты увеличивать в клиенте
-
Здравствуйте! У меня MATERIALIZED VIEW есть на табличку и к этой таблице нужно добавить несколько новых полей и соответственно SELECT для MATERIALIZED VIEW будет другой, с учётом этих новых полей. Если всё уже работает на продакшене, как мне изменить мою VIEW на горячую?
Спасибо -
Доброго вечера!
Видимо я чего-то не понимаю, но запрос подсчета уникальных значений работает в таком виде:
SELECT COUNT(DISTINCT uuid) FROM db.table
Но как только я группирую результат по другому столбцу:
SELECT toYYYYMMDD(createdAt) AS requestDay, COUNT(*) as hits, COUNT(DISTINCT(uuid)) as uniqs, FROM db.table GROUP BY requestDay
Я получаю ошибку:
Expected one of: FORMAT, HAVING, UNION, LIMIT, OFFSET, AND, OR, GROUP BY, WINDOW, ORDER BY, MOD, DIV, LIKE, ILIKE, NOT LIKE, NOT ILIKE, IN, NOT IN, GLOBAL IN, GLOBAL NOT IN, IS, Comma, Dot, Arrow, QuestionMark, token, INTO OUTFILE, SETTINGS, alias, NOT, AS, FROM, PREWHERE, WHERE, WITH, BETWEEN, end of query -
-
сначала стопаем INSERT в source таблицу
ALTER TABLE source_table ADD COLUMN .. ;
ALTER TABLE destination_table ADD COLUMN ... , ADD COLUMN ... ;
DROP MATERIALIZED VIEW mv;
CREATE MATERIALIZED VIEW ... TO destination_table AS SELECT... FROM source_table ...; -
Лучше использовать unique
https://clickhouse.tech/docs/en/sql-reference/aggregate-functions/reference/uniq/uniq | ClickHouse Documentationuniq Calculates the approximate number of different values of the argument. uniq(x[, ...]) Arguments The function takes
-
спасибо, применю её, однако беда с ошибкой не исчезла
-
-
-
нет
больше не буду флудить здесь, если кто-то сможет помочь, буду благодарен -
запятая лишнияя после as uniqs
-
я идиот, спасибо
-
Подскажите плз, можно ли при выставлении привелегий роли задавать имена таблиц регуляркой?
-
это jdbc драйвер. Там в настроках grip надо поставить socket_timeout=300000 ( в мс)
-
зависит от того с каким синтаксисом сделано view (с to или нет) и какое поле добавлять, метрику или дименшин
-
кажется не, либо * , либо имя
-
Подскажите, можно ли что-то сделать для оптимизации в ситуации, когда партиции по дням, ключ-ордер допустим по A,B который эффективен 90% времени, но иногда нужно сагреггировать при B=.. без ограничений по времени, при этом спектр значений B ограничен сотней, но они равномерно присутствуют по всей таблице
-
тут нечего оптимизировать. Даже если все поменять, лучше не станет.
-
-
Может вам поможет MV?
Группировка за всё время по низко-кординальной колонке - типичный юз-кейс кмк -
-
-
-
Для всего сервера "триггер" будет срабатывать 150 раз в минуту - 30 вставок в минуту * 5 баз.. Как-то легкомысленно кажется такое вешать. Да и нет нужды чаще раза в пару минут обновлять. Наверное придется скриптом трогать
-
погляжу тоже, спасибо
-
как раз мат.вью без SummingMergeTree смысла особого не имеет
- 20 April 2021 (188 messages)
-
Здравствуйте, подскажите Есть ли возможность развернуть массив неопределенной длинны в колонки ?
-
нету.
Вообще SQL предполагает что кол-во колонок в результате и их типы известны до выполнения. Иначе реляционность ломается. -
Human verification
Stack Overflow | The World’s Largest Online Community for Developers
-
Всем привет! Кто может подсказать про ReplacingMergeTree? В доке написано, что этот движок не гарантирует отсутствие дубликатов. Это так и осталось? Если так, то нет ли другого варианта, возможно, отсекать кликхаусом дубликаты записей (так же по ключу сортировки или как-то по-другому)
-
Добрый день, подскажите пожалуйста как можно решить такие ошибки
-
invokehttp.java.exception.message
IOException thrown from InvokeHTTP[id=3a0966a1-6338-3490-8811-8115f338bc44]: java.net.SocketException: Broken pipe (Write failed)
строка вставки:
http://nn.nn.nnn.nn:8123/?format_csv_delimiter=;&max_partitions_per_insert_block=0&format_csv_allow_double_quotes=0&date_time_input_format=best_effort&receive_timeout=36000&send_timeout=360000&query=INSERT -
Да, так и осталось. Отсекается, например через select * from tab order by fld1, fld2 limit 1 by fld1, fld2
-
Спасибо! Я тут еще узнал про FINAL, он тоже помогает отсечь?
-
Да, к сожалению
-
А также может вызывать мержи
-
Не совсем понял, а почему к сожалению? Цель ведь отсечь как раз дубликаты)
-
-
Так он не только группирует, но и слияние вызывает
-
Понял, а для этого запроса нужно предварительно у таблицы задать такой же ORDER BY ведь?
-
ORDER BY (fld1, fld2)
-
Не обязательно, разве что для скорости
-
Спасибо!
-
Здравствуйте!
-
> https://clickhouse.tech/docs/en/interfaces/cli/#cli-queries-with-parameters
Похоже, не поддерживает Nullable - это баг?Command-Line Client | ClickHouse DocumentationCommand-line Client ClickHouse provides a native command-line client: clickhouse-client. The client supports command-lin
-
clickhouse-client --param_test null
SELECT {test:Nullable(Int64)}
Query id: a6e4ecaa-ecf3-4dfe-8ea6-5ae2c9a83814
Exception on client:
Code: 457. DB::Exception: Value null cannot be parsed as Nullable(Int64) for query parameter 'test' because it isn't parsed completely: only 0 of 4 bytes was parsed: -
Всем привет! Хочу поставить TTL для system.query_log и system.query_thread_log. Положил в /etc/clickhouse-server/config.d/querylog.xml вида
<yandex>
<query_log>
<database>system</database>
<table>query_log</table>
<ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
</query_log>
<query_thread_log>
<database>system</database>
<table>query_thread_log</table>
<ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
</query_thread_log>
</yandex>
рестартанул сервер, но что то таблички не проапдетались. В какую сторону начинать копать? Заранее спасибо -
надо так потому что. ключа ТТЛ нел.
https://t.me/clickhouse_ru/209974Dmitry [Altinity] Titov in ClickHouse не тормозитExample for query_log. It drops partitions with data older than 14 days: $ cat /etc/clickhouse-server/config.d/query_log_ttl.xml <?xml version="1.0"?> <yandex> <query_log> <database>system</database> <table>query_log</table> <engine>ENGINE = MergeTree PARTITION BY (event_date) ORDER BY (event_time) TTL event_date + 14 day DELETE SETTINGS ttl_only_drop_parts=1 </engine> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </query_log> </yandex> After that you need to restart ClickHouse and drop or rename the existing table system.query_log, then CH creates a new table with these settings. rename table system.query_log to system.query_log__1; Important part here is a daily partitioning PARTITION BY (event_date) and ttl_only_drop_parts=1. In this case ClickHouse drops whole partitions. Dropping of partitions is very easy operation for CPU / Disk I/O. Usual TTL (without ttl_only_drop_parts=1) is heavy…
-
Всем привет! Подскажите плиз, как можно передать результат запроса в качестве массива?
Суть какая:
SELECT
arrayIntersect([1,2,3,4,5,6,7], [массив SELECT DISTINCT col FROM table]) AS intersect
[массив] условно принимает значения 3, 5, 8, 10, 15
из запроса хотелось бы получить 3, 5
из документации вообще не нашёл, как результат запроса поместить в массив, может криво смотрел -
Понял! Спасибо!
-
-
можно, например, так
SELECT
arrayIntersect([1,2,3,4,5,6,7], (SELECT DISTINCT groupArray(col) FROM (select 1 col union all select 3 col))) AS intersect -
спасибо большое! попробую
-
только не SELECT DISTINCT groupArray(col), а SELECT groupUniqArray(col) :)
-
очень признателен! да, работает как часы!
-
-
/var/lib/clickhouse/data
-
Спасибо за ответ. Но вопрос был немного в другом. Я сейчас выбираю облачную БД.
БД нужна с территориальным расположением - Россия. В общем мой вопрос про страну/город . И можно ли указать чтобы данные хранились только в РФ? -
-
-
-
-
Добрый день, подскажите пожалуйста как можно решить такие ошибки
invokehttp.java.exception.message
IOException thrown from InvokeHTTP[id=3a0966a1-6338-3490-8811-8115f338bc44]: java.net.SocketException: Broken pipe (Write failed)
строка вставки:
http://nn.nn.nnn.nn:8123/?format_csv_delimiter=;&max_partitions_per_insert_block=0&format_csv_allow_double_quotes=0&date_time_input_format=best_effort&receive_timeout=36000&send_timeout=360000&query=INSERT -
bigquery - это serverless облачный DWH от гугла (именно на google cloud)
clickhouse - это DBMS, который может быть развернут на разных облаках и локально. На ваш вопрос - зависит не от CH, а от провайдера, предоставляющего доступ к нему (если говорим про облако)
p.s. не совсем корректное сравнение в целом -
Привет! Как посмотреть логи движка rabbitmq. Почему clickhouse не забирает данные из очереди?
-
всем привет! обновился на 21.3.6.55 и начались тормоза. такое ощущение, что отвалилось партиционирование по времени. запрос SELECT now()-MAX(Time) FROM ... может выполняться до 300мс и читать вообще всю таблицу
-
нет, никаких слияния селект не вызывает. Селект просто финализирует по ключу, причем делает это например без учета партций
-
-
CODEC T64
-
тут ошибка java на клиенте.
у вас проблемы начались после апргрейда на новую версию КХ?
воспроизводится? -
весь запрос покажите. У КХ никогда не было оптимизации для max( )
-
SELECT 'val',now()-MAX(Time) FROM table. а вообще стали тормозить интервальные запросы например
-
WITH subtractMinutes(now(), 5) as nowStart, subtractHours(now(), 1) as hauStart, subtractDays(now(), 1) as dauStart, subtractDays(now(), 7) as wauStart, subtractMonths(now(), 1) as mauStart
SELECT uniqExactIf(RemoteUser, Time >= nowStart) as M5AU,
uniqExactIf(RemoteUser, Time >= hauStart) as HAU,
uniqExactIf(RemoteUser, Time >= dauStart) as DAU,
uniqExactIf(RemoteUser, Time >= wauStart) as WAU,
uniqExact(RemoteUser) as MAU
FROM table
WHERE Time >= mauStart FORMAT JSON -
а вот этот запрос стал выполняться 5.6с
-
WITH toDateTime(1618866000 - 1) as left, toDateTime(1618952399) as right
SELECT
toUInt32(toDateTime(toStartOfDay(addDays(Time, 1)))) * 1000 as t,
replaceRegexpOne(Request, '/events/([^?]+).*', '\\1') as Type,
count()
FROM table
WHERE
Time BETWEEN toDateTime(toStartOfDay(left)) and right
and Request like '/events/%' and (Status = 200)
and Status = 200
GROUP BY
t,
Type
ORDER BY
t FORMAT JSON -
Привет всем, у нас бегает кликхаус в кубике, а есть какие-то best practices как бэкапы настраивать в таком случае?
-
Привет! clickhouse-backup вторым контейнером в поде у нас (если я правильно понял что такое кубик)
-
да, так и сделано сейчас, а как вы его запускаете?
-
-
а почему не нравится? Ну то есть из другого пода стучаться в pod кликхауса, в контейнер где backup так?
-
-
не, бэкапер прям в том же поде что и кх живёт. Мы pvc используем, это единственный (известный мне) способ доступ из разных контейнеров получить
-
ну бэкапер сам, да, а cronjob где живет?
-
если это cronjob кубернетиса
-
-
-
-
понял, спасибо, так и сделаем, только единственное пока не понял, надо ли какую--то логику дописывать, я пока вижу что /backup/upload/ требует туда какой конретно бэкап прислать
-
в смысле чтобы дифы выгружать каждый час к примеру
-
Привет. Есть какие-то встроенные способы ограничить максимальный размер базы данных на диске?
-
прямо вот по размеру ... наверное нет
но есть TTL для таблиц и для столбцов, можно по времени ограничивать
https://clickhouse.tech/docs/en/sql-reference/statements/create/table/#ttl-expressionTABLE | ClickHouse DocumentationCREATE TABLE Creates a new table. This query can have various syntax forms depending on a use case. By default, tables a
-
На самом деле, мы тут как раз проверили гипотезу о маунте одной pvc в разных подах при выставлении правильной podAffinity, чтобы попадали на одну ноду. Работает.
-
-
Нет
-
У нас AWS вообще
-
Там multi-attach недавно завезли, а поддерживается он емнип только в CSI провайдере, на который мы не перешли. Попробуйте просто скедулить под с clickhouse-backup на ту же ноду
-
-
-
Странно. Я сомневаюсь что это из за апгрейда
-
ошибку я нашел, но стало непонятно почему оно раньше тогда работало с приемлемой скоростью)
-
Вас невозможно понять. Какую ошибку. Вы о чем?
-
Что-то я смотрю на clickhouse backup, он дифы не умеет получается? Каждый раз полная таблица?
-
Этот кодек не поддерживат массивы, или в новых версиях (20+) уже добавили поддержку?
-
Добрый день, не подскажете новичку, что делать, если clickhouse-client висит и жрет при этом 100% cpu и 16GB памяти на запросе quit
данных вообще нет, оригинальные данные дефолтные + таблица на 2 записи
Как дебажить и в какую сторону копать
ClickHouse client version 21.4.3.21 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 21.4.3 revision 54447. -
https://github.com/AlexAkulov/clickhouse-backup/search?q=diff
Upload backup to remote storage: curl -s localhost:7171/backup/upload/<BACKUP_NAME> -X POST | jq .
Optional query argument diff-from works the same as the --diff-from CLI argument.
не то чтобы он вообще не умеет diff
но скажем так, пока там диффами все сложно можно вот тут спросить у автора
https://t.me/clickhousebackupSearch · diff · AlexAkulov/clickhouse-backupTool for easy ClickHouse backup and restore with cloud storages support - Search · diff · AlexAkulov/clickhouse-backup
-
Причем, clickhouse-server очень даже живой, при обращении curl’ом на порт 8123 данные отдает нормально
-
ключ сортировки таблицы не совпадал с колонкой, по которой делается выборка диапазона. т.е. запрос был по колонке Time, а сортировка по колонке TimeStamp, из которой материализуется колонка Time
-
Спасибо, нашел вот тут issue https://github.com/AlexAkulov/clickhouse-backup/issues/81
Но как-то сильно много надо работы, чтоб делать один раз в день, скажем бэкап, а потом снапшоты каждый час -
Может проще каждый час всю таблицу заливать)
-
Это нужен какой-то конвеншн по названию, скажем начало часа, привязывать к предыдущему еще каждый раз, сложна получается
-
Странно немного что такая частая задача не автоматизирована полностью
-
ну, вы представляете, но лет 10 назад, инкрементальный бекап считался "прорывом"
вы можете попробовать в dev ветку clickhouse-backup патч прислать, я думаю его с радостью примут -
да, оборзел совсем я, понимаю) я скорее о том, что это по идее первое что хотят для продакшна, патч, надо спросить у автора, может какой-то просто рецепт есть
-
-
Jdbc позволяет лить стрим в чем угодно. Tsv/parquet/native/rowbinary...
-
-
почему JDBC не поможет?
https://github.com/ClickHouse/clickhouse-jdbc/search?q=array
вроде есть там поддержка массивовSearch · array · ClickHouse/clickhouse-jdbcJDBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-jdbc development by creating an account on GitHub.
-
-
select 1,2,3 format CSV
-
Не совсем понял, как это связано с добавлением массива в поле через JDBC
-
Это покажет как должен выглядеть стрим в нужном формате
-
В jdbc проще эффективнее всего просто самому формировать стрим например в rowbinary и посылать через sendstream
-
-
Изменилась логика какие поля двигать в prewhere. Но все равно это не имеет отношения к max. Кстати max можно найти через orderby limit в этом случае используется индекс
-
Добрый день. Помогите новичку. Есть основная таблица xxx_table с количеством записей 9 823 014 063. Тип ReplicatedMergeTree. PARTITION BY toYYYYMM(date), SETTINGS index_granularity = 8192
Для этой таблицы пытаюсь сделать матвью с движком AggregatingMergeTree (с ограниченными предикатом записями, кол-во 7 534 660 705, и с меньшим кол-вом стоблцов + sum агрегации сжимая данные за день).
Если создавать матвью с POPULATE, то запрос падает с нехваткой памяти выделенной под один запродс (60Гб).
Вопрос: Почему не получается? На что нужно обратить внимание? Какой должен быть объем памяти? -
https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf
https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597 -
Прямо на ваш вопрос это не отвечает, но, как альтернатива:
1) Использовать явное задание MV (когда таблица-результат создаётся отдельно и независимо от MV). Судя по POPULATE - вы используете неявное задание.
2) Вместо POPULATE заполнять результирующую таблицу с помощью INSERT ... SELECT ...
из исходной, воспроизведя там ту же обработку, что и должно делать MV.
Это и отлаживать куда проще, и контроля больше -
Привет. А есть ли в CH данные про попытки вставить дубликаты в MergeTree ?
-
В материализованном представлении в x2 меньше данных чем в оригинальной таблице. Сходу сетую на дедубликацию. Оставляют ли какие-то артефакты INSERT с дублями?
-
по умолчанию дедупликация наследуется от исходной таблицы
-
да, у меня включена deduplicate on materialized view и на каждую вставку я генерирую строку уникальную для этой вставки
-
подкладываю ее в insert чтобы group by оно попало
-
читаю из кафки, грубо говоря у меня idempotency_key это
topic:partition:offset -
в логе КХ видны сообщения про skipped когда дедупликация срабатывает
-
посмотрю, спасибо
-
так, только что вспомнил, чтобы не мусорить актуальными датами, я выкрутил date и datetime в 0, то есть та часть, которая идет про идемпотентность уходит в парт 1970 года
hash на дедубликацию относительно чего считается? надеюсь целиком от всего insert или бьет на парты и по отдельности? -
-
Провел эксперимент, выполнил два INSERT
INSERT INTO test_table (usage_date, user_id) VALUES ('1970-01-01', 'b'), ('2021-04-01', 'b')
INSERT INTO test_table (usage_date, user_id) VALUES ('1970-01-01', 'a'), ('2021-04-01', ‘b’) -
результатом должно было стать
1970-01-01 b
1970-01-01 a
2021-04-01 b
2021-04-01 b -
но clickhouse сдедублицировал второй инсерт, причем не полностью
-
а напротив парта 2021-04
-
это ожидаемо?
-
Покажите SHOW CREATE TABLE таблицы test_table
-
А это нормально, что внутри /var/lib/clickhouse/tmp/data/<databases>/<tables>/ скапливаются пустые папки tmp_merge_partition_X_Y_N чуть ли не со всех происходивших когда-то давно слияний?
Кроме как впустую расходовать inodes они там зачем-то нужны, можно их почистить? -
-
Какая версия? вообще не должно
-
Маньяки 😁
-
Поначалу 20.4.* , последние несколько месяцев 20.10.7.4
-
Добрый день, подскажите, пожалуйста, как можно подключиться к clickhouse по бинарному протоколу (не через http) в гошке?
Сейчас использую коннектор от мейлру, ругается на то, что не подходит протокол:
connect, err := sql.Open("clickhouse", "tcp://127.0.0.1:9001") -
кто знает, в КХ есть возможность "предпросмотра" в том плане, что когда выполняешь запрос, КХ начнёт показывать какое-то кол-во результатов(к примеру 100), пока выполняет большой запрос
-
select * from liquidity_test limit 10
подойдет? -
нет) запрос с лимитом 1млн допустим, и пока селект выполняется показывает первые 100
-
какой драйвер?
почему 9001 порт? -
кликхаус умеет отправлять уже готовые блоки данных во время выполнения запроса, но это зависит от самого запроса.
-
А когда последний раз изменялись папки в этой папке?
-
ага, тоже замечал, только не уловил закономерность
-
Закономерность простейшая, допустим есть оптимизация optimize_read_in_order, если ваш ORDER BY в запросе частично совпадает с ORDER BY таблицы, то кх может отправлять блоки по мере готовности, аналогично для GROUP BY и optimize_aggregation_in_order
-
всем привет!
подскажите пожалуйста
где почитать, посмотреть
как формируются *.bin файлы в распределённых таблицах
почему на инсерт 10к строк создаются десятки - сотни бинов
и в файле тоже вложена конструкция NSERT INTO
но катом такой файл на пару строк всего
хочется более подробно разобраться как это работает -
Если в данных инсерта есть строки, относящиеся к разным партициям - будет создано несколько наборов файлов на диске.
-
хм, интересно
но у нас вставки всегда на текущую дату
в редких случаях когда затрагиваем несколько дат в разных партициях -
Supported since 20.10 (PR #15089) https://github.com/ClickHouse/ClickHouse/pull/15089
-
нет, не так должно работать. У вас точно в insert 10к строк? Через что вы (api) инсерт делаете?
-
Пофиксили
https://github.com/ClickHouse/ClickHouse/issues/22432Ошибка ClickHouse Code: 10, e.displayText() = DB::Exception: Not found column equals(catalog_id, 1041) in block · Issue #22432 · ClickHouse/ClickHouseИмеется Materialized база, данные реплицируюся нормально, в базе данные есть Если выполнить запрос SELECT DISTINCT P.id, P.name, P.catalog_id FROM products P WHERE P.name ILIKE '%Легкие%&am...
-
дистрибьютид таблица не знает про партиции
-
пайтон, go клиенты
нативный в шелл скриптах
разные консьюмеры на go, а писатели метрик пайтон юзают -
я спрашиваю как вы инсерты делаете? почему вы думаете что у вас 10к строк в инсерте?
-
такие нашим разработчикам инструкции даны)
батчи не менее 10К строк и не чаще одной вставки в сек -
ну и заводите им баг. Чтобы разобрались как батч-инсерты делать в КХ
-
Привет.
Не могу понять , как работать с AggregatingMergeTree. Создал вот такую таблицу:
CREATE TABLE Test1
(
`ID` UInt64,
`Counter` SimpleAggregateFunction(sum, UInt64),
`Description` SimpleAggregateFunction(argMax, String, DateTime),
`UpdatedTime` DateTime
)
ENGINE = AggregatingMergeTree
ORDER BY (ID)
Как из ней выбрать для заданного ID значение счётчика и последний вставленный Description ? По отдельности ясно как это сделать. Но одним запросом - нет. -
А какая версия КХ? Можете еще пожалуйста приложить побольше логов во время выполнения такого запроса.
-
тогда так и сделаю
то есть на одну вставку в дистриб таблицу, при условии что правильно сформирован батч-инсерт
должно быть создано только по одному bin файлу в папках по каждому шарду
никак не десятки? -
`Description` SimpleAggregateFunction(argMax, String, DateTime),
это вы сами такое придумали? SimpleAggregateFunction(argMax, String, DateTime)
не будет работать. -
да
-
спасибо
-
-
key Array(String), value Array(String)
-
map внутри это Array ( Tuple (K, V))
-
я так же делал, а в чём проблема?
-
И как это может работать? Продемонстрируете?
-
SimpleAggregateFunction поддерживает argMax. или проблема в том что val - дата?
https://clickhouse.tech/docs/ru/sql-reference/data-types/simpleaggregatefunction/SimpleAggregateFunction(func, type) | Документация ClickHouseSimpleAggregateFunction(func, type) Хранит только текущее значение агрегатной функции и не сохраняет ее полное состояние
-
эта таблица создалась без проблем:
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(argMax, String, DateTime)) ENGINE=AggregatingMergeTree ORDER BY id; -
а инсерте вы что туда?
-
что лежит в val ? Tuple(String, DateTime) ?
-
да tuple, но сейчас у меня последняя версия кликхауса и на таком инсерте у меня кликхаус падает
-
а как вы инсерт тупла делаете / собирались делать?
-
из мат вью
-
insert select тоже работал
-
починил свои проблемы (была зависшая мутация).
отрабатывает без проблем:
INSERT INTO simple SELECT 1, tuple('k', '2020-01-01 01:01:01:02'); -
Received signal Segmentation fault impleAggregateFunction(argMax · Issue #23380 · ClickHouse/ClickHouse
21.5.1.6605 create table A ( Description SimpleAggregateFunction(argMax, String, DateTime)) Engine=SummingMergeTree Order by tuple(); insert into A values ('a'), ('v'...
-
то что SimpleAggregateFunction работает с argMax раньше было написано только в английской и китайской документации. а сейчас смотрю уже и в русской поправили
-
спасибо, разбираюсь
-
ну я вообще не про это, я считал что надо явно писать Tuple в
SimpleAggregateFunction(argMax, Tuple(String, DateTime)) -
что-то через раз рабоает
-
и я все правильно думал (оказывается я даже тесты на это писал).
create table A (k Int64, Description SimpleAggregateFunction(argMax, Tuple(String, DateTime))) Engine=SummingMergeTree Order by k;
insert into A select 1, arrayJoin([('a', '2020-01-05 00:00:00'), ('v','2020-01-05 00:00:30'), ('zx','2020-01-05 00:00:00')]);
optimize table A final;
SELECT * FROM A
┌─k─┬─Description─────────────────┐
│ 1 │ ('v','2020-01-05 00:00:30') │
└───┴─────────────────────────────┘ -
Ну и смысла в этом никакого SimpleAggregateFunction(argMax, Tuple(String, DateTime) это ровно тоже самое что AggregateFunction(argMax
-
так и я правильно думал :) только что-то при попытке сейчас вставить ещё одну запись ловлю сегфолт, но на какой-то старой версии всё работало
-
смысл в том что дынные лежат уже в нужном виде и не надо возиться с -Merge/-State
-
еще раз
SimpleAggregateFunction(argMax, String, DateTime) === неправильно, никогда не работало и не будет.
SimpleAggregateFunction(argMax, Tuple(String, DateTime)) -- правильно и обложено тестами и проверяется тысячи раз в день -
кто ж знал, что обложено тестами а что нет, что правильно, а что нет. argMax работает как с двумя парметрами так и с туплом.
-
т.е. вы хотите сказать что раньше работало правильно даже без Tuple в SimpleAggregateFunction ? В какой версии?
-
скрин, который я вам сейчас скинул - 21.3.3.14, но больше одной записи не вставляется, ловлю сегфолт. раньше тестил на 20.4.5.36, ошибок не было
раньше использовал даже вот такую штуку: AggregateFunction(argMaxIf, String, DateTime, UInt8)
но в прод не ушло, возможно по этому не знал, что оно работает через раз -
да блин да вы издеваетесь, только время блин теряю.
причем тут AggregateFunction ? -
во всех версиях КХ SimpleAggregateFunction(argMax, String, DateTime) падает, никогда не работало
AggregateFunction вообще не про это и вообще абсолютно другой код, с похожей функциональностью -
это я для примера скинул, что я тестил разное, но пример не корректный, соглашусь. на этом предлагаю остановиться и не тратить ваше время и нервы :) бага заведена, всё хорошо
-
Добрый вечер. Функция IPv4CIDRToRange(ipv4, Cidr) возвращает кортеж. Можно ли результат преобразовать как-то в массив, или ещё вот что-то, чтобы смело можно было написать ip in (...) Или ip between , используя средства только кликхауса? Куда смотреть ?
На текущий момент делал достаточно топорно - загружал в словарь и искал вхождения. -
наверное просто IPv4CIDRToRange ().1 and IPv4CIDRToRange().2 ?
-
Благодарю.
-
-
-
берете два кубика, бросаете, результат перемножаете, это будет оптимальная величина
-
то есть от 1 до 36?)
-
да
-
Привет! Кажется стоит обновить документацию по s3 engine: в ней сейчас указано 6 параметров для движка (включая структуру). Но версия 21.4.4.30 знает только про 5 (структуры нет).
BTW, это было очень больно дебажить, поскольку я положил креды в конфиг, и передавал в create 4 параметра (path, format, structure и compression). При попытке insert я получал SignatureDoesNotMatch и долго недоумевал, что происходит, и только когда решил бахнуть select - увидел Unknown format gzip, который навел на мысль о том, что с позиционными параметрами что-то не так - ch решил, что я принес креды в createS3 | ClickHouse DocumentationS3 Table Engine This engine provides integration with Amazon S3 ecosystem. This engine is similar to the HDFS engine, bu
-
зря вы сюда пишете, никто этого не прочитает https://github.com/ClickHouse/ClickHouse/issues/new?assignees=&labels=comp-documentation&template=60_documentation-issue.md&title=
- 21 April 2021 (168 messages)
-
да, ошибки на nifi при вставке в КХ по http post. Подобные ошибки появляются при интенсивной вставке, может ли быть что КХ их отбивает?
Бывает часть данных успевает записать и отваливается.
Может ли параметр keep_alive_timeout влиять на эту проблему??
IOException thrown from InvokeHTTP[id=3a0966a1-6338-3490-8811-8115f338bc44]: java.net.SocketException: Broken pipe (Write failed)
http://Х.Х.Х.Х:8123/?format_csv_delimiter=;&max_partitions_per_insert_block=0&format_csv_allow_double_quotes=0&date_time_input_format=best_effort&receive_timeout=36000&send_timeout=360000&query=INSERT%20INTO%20... -
Привет, есть кластер из 3х реплик. Возможно ли его пересобрать в кластер из 2х шардов и 2х реплик как на картинке. Если просто конфигурацию поменять поможет?
-
Такой запрос:
SELECT * FROM s3('https://backup.s3.amazonaws.com/data/topic/2021/01/01/00/s_user+2+0001190991.json.gz', 'KEY', 'SECRET', 'JSONEachRow', 'user_id Int64, name String, ts Int64', 'gzip')
Такой эксепшн:
Received exception from server (version 20.10.5):
Code: 499. DB::Exception: Received from my.cluster.com:9000. DB::Exception: <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>********************</AWSAccessKeyId><StringToSign>AWS4-HMAC-SHA256 -
-
Huawei OBS: s3 SignatureDoesNotMatch when path has '=' · Issue #23283 · ClickHouse/ClickHouse
CREATE TABLE default.ods_test_user ( mobile_number String ) ENGINE = S3('https://***.com/${bucket}/test/user/etl_date=*/*', '***', '***', 'CS...
-
кх не поддерживает = в url строке для s3
-
сори, не тот пример сбросил
там = не должно быть, это ради интереса попробовал
без = то же самое выдает -
А какой там url?
-
-
А если
https://backup.s3.amazonaws.com/data/topic/2021/01/01/00/s_user_name*.json.gz
? -
сейчас пробну
думаете плюсы мешают? -
Возможно
-
не, то же самое
-
ну порт поменяйте на 8123
будете ходить по http
есть binary коннектор
https://github.com/ClickHouse/clickhouse-go/GitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouseGolang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
Всем привет!
А существует в явном виде возможность conditional join'a? Хотел присоединить вторую табличку, но только для тех строк, где ключ-строка не пустой
AS t2 ON (t1.session_id = t2.session_id) AND isNotNull(t1.session_id)
Получаю:
DB::Exception: Expected equality or inequality, got 'isNotNull(id)': While processing isNotNull(id).
Для условия \and t1.id!=''\ аналогично. -
По всей видимости плюсы декодируются как-то неправильно.
Прописал URL со звездочкой, чтобы все файлы перебрал.
В эксепшене вижу упоминание объекта — `s_user_name%200%200001188763.json.gz`
В S3 он именован как s_user_name+0+0001188763.json.gz -
Видимо так, можете написать это в тот issue в гитхабе?
-
-
-
Вы скорее всего можете прямо в WHERE написать это условие и кх пропихнет его вверх в подзапрос
-
увы нет
-
Добрый день, обновились до 21.4.4.30
Начали получать вот такие вот ошибки
2021.04.21 05:07:53.641943 [ 586494 ] {04d19dd0-692d-4dab-ab46-ac75cdc87eb8} <Error> DynamicQueryHandler: Code: 49, e.displayText() = DB::Exception: Can't
initialize pipeline with empty pipe.: While executing Remote, 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) @ 0x8914f0a in /usr/bin/clickhouse
1. DB::QueryPipeline::init(DB::Pipe) @ 0x101b03f1 in /usr/bin/clickhouse
2. DB::Connection::sendExternalTablesData(std::__1::vector<std::__1::unique_ptr<DB::ExternalTableData, std::__1::default_delete<DB::ExternalTableData> >, std::__1::allocator<std::__1::unique_ptr<DB::ExternalTableData, std::__1::default_delete<DB::ExternalTableData> > > >&) @ 0x1008c5db in /usr/bin/clickhouse
3. DB::HedgedConnections::processNewReplicaState(DB::HedgedConnectionsFactory::State, DB::Connection*) @ 0x100a3f89 in /usr/bin/clickhouse
4. DB::HedgedConnections::getReadyReplicaLocation(std::__1::function<void (int, Poco::Timespan const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>) @ 0x100a243f in /usr/bin/clickhouse
5. DB::HedgedConnections::receivePacketUnlocked(std::__1::function<void (int, Poco::Timespan const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>) @ 0x100a323e in /usr/bin/clickhouse
6. DB::RemoteQueryExecutorRoutine::operator()(boost::context::fiber&&) const @ 0xf11cb52 in /usr/bin/clickhouse
7. void boost::context::detail::fiber_entry<boost::context::detail::fiber_record<boost::context::fiber, FiberStack&, DB::RemoteQueryExecutorRoutine> >(boost::context::detail::transfer_t) @ 0xf11ca2e in /usr/bin/clickhouse
(version 21.4.4.30 (official build))
Откатываться назад? -
-
EXPLAIN SYNTAX SELECT ...
EXPLAIN AST SELECT...
что показывает? -
DB::RemoteQueryExecutorRoutine
вы remote() или Distributed таблички используете? -
-
┌─explain───────────────────────────────────────────────────────────────────────────────────────────┐
│ SELECT │
│ count(), │
│ sum(vol) │
│ FROM │
│ ( │
│ SELECT │
│ count() AS cnt, │
│ sum(size) AS vol │
│ FROM ladnl.dnl_log │
│ WHERE (event_date = '2021-04-20') AND (serial GLOBAL IN ( │
│ ( │
│ SELECT md5 │
│ FROM ladnl.dnl_log │
│ WHERE (event_date = '2021-04-20') AND (host_id = 191) AND (appid = 2143) AND (keynum > 0) │
│ GROUP BY md5 │
│ ) AS _subquery30)) │
│ GROUP BY serial │
│ HAVING count() = 73 │
│ ) │
└───────────────────────────────────────────────────────────────────────────────────────────────────┘
┌─explain────────────────────────────────────────────────────┐
│ SelectWithUnionQuery (children 1) │
│ ExpressionList (children 1) │
│ SelectQuery (children 2) │
│ ExpressionList (children 2) │
│ Function count (children 1) │
│ ExpressionList │
│ Function sum (children 1) │
│ ExpressionList (children 1) │
│ Identifier vol │
│ TablesInSelectQuery (children 1) │
│ TablesInSelectQueryElement (children 1) │
│ TableExpression (children 1) │
│ Subquery (children 1) │
│ SelectWithUnionQuery (children 1) │
│ ExpressionList (children 1) │
│ SelectQuery (children 5) │
│ ExpressionList (children 2) │
│ Function count (alias cnt) (children 1) │
│ ExpressionList │
│ Function sum (alias vol) (children 1) │
│ ExpressionList (children 1) │
│ Identifier size │
│ TablesInSelectQuery (children 1) │
│ TablesInSelectQueryElement (children 1) │
│ TableExpression (children 1) │
│ Identifier ladnl.dnl_log │
│ Function and (children 1) │
│ ExpressionList (children 2) │
│ Function equals (children 1) │
│ ExpressionList (children 2) │ -
│ Identifier event_date │
│ Literal '2021-04-20' │
│ Function globalIn (children 1) │
│ ExpressionList (children 2) │
│ Identifier serial │
│ Subquery (children 1) │
│ SelectWithUnionQuery (children 1) │
│ ExpressionList (children 1) │
│ SelectQuery (children 4) │
│ ExpressionList (children 1) │
│ Identifier md5 │
│ TablesInSelectQuery (children 1) │
│ TablesInSelectQueryElement (children 1) │
│ TableExpression (children 1) │
│ Identifier ladnl.dnl_log │
│ Function and (children 1) │
│ ExpressionList (children 4) │
│ Function equals (children 1) │
│ ExpressionList (children 2) │
│ Identifier event_date │
│ Literal '2021-04-20' │
│ Function equals (children 1) │
│ ExpressionList (children 2) │
│ Identifier host_id │
│ Literal UInt64_191 │
│ Function equals (children 1) │
│ ExpressionList (children 2) │
│ Identifier appid │
│ Literal UInt64_2143 │
│ Function greater (children 1) │
│ ExpressionList (children 2) │
│ Identifier keynum │
│ Literal UInt64_0 │
│ ExpressionList (children 1) │
│ Identifier md5 │
│ ExpressionList (children 1) │
│ Identifier serial │
│ Function equals (children 1) │
│ ExpressionList (children 2) │
│ Function count (children 1) │
│ ExpressionList │
│ Literal UInt64_73 │
└────────────────────────────────────────────────────────────┘ -
похоже на баг в GLOBAL ...
думаю стоит упростить запрос до минимально воспроизводимого и сделать issue на github -
добрый день!
подскажите, почему такой запрос:
SELECT
event_time, abs(runningDifference(event_time)) AS delta, rb, mu
FROM (
SELECT event_time, formatReadableSize(read_bytes) AS rb, formatReadableSize(memory_usage) AS mu
FROM clusterAllReplicas('sosisa', 'system', 'query_log')
WHERE
event_date = today()
AND event_time >= now() - INTERVAL 1 HOUR
AND ProfileEvents.Values[indexOf(ProfileEvents.Names, 'SelectQuery')] = '1'
AND user = 'kotique'
ORDER BY event_time ASC
LIMIT 25
)
не всегда считает runningDifference (местами он просто 0 как будто разные блоки)? -
-
optimize_read_in_order=0?
-
то же самое
-
вот пример ответа https://pastebin.com/M9qi44yD2021-04-21 11:04:04 0 68.10 GiB 5.35 GiB2021-04-21 11:05:01 57 68.13 GiB 5.36 - Pastebin.com
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
ребят, такой вопрос:
расследую Exception: Cannot provide query execution status. The query's node <path> has been deleted by the cleaner since it was finished (or its lifetime is expired).
ловится рандомно на дистрибьютед DDL (version 20.12.4.5)
в квэри-логе родительский запрос:
QueryStart - 2021-04-21 08:05:44.397523
ExceptionWhileProcessing - 2021-04-21 08:05:44.456042
т.е. получает эксепшен через 58 мс
* причем дочерний квэрик (типа /* ddl_entry=query-XX */ ...) пришел (из ЗК как понимаю) и выполнился без проблем на этой ноде и по остальным в кластере
** на ноде-инициаторе запроса - дочерний начался даже раньше чем получен эксепшен на родительский запрос
QueryStart = 2021-04-21 08:05:44.423589
QueryFinish = 2021-04-21 08:05:44.735141
=====
вопросы:
1 - может ли быть так что в ClickHouse/dbms/src/Interpreters/DDLWorker.cpp обращение if (!zookeeper->exists(node_path)) ждет, например, кворума или еще по какой-то причине не получает корректного ответа, при том что запрос который был сформирован из ЗК task_queue уже успел прийти и начать выполняться? Если да - есть советы по обходу?
2 - есть ли способ добавить запросу какую-нибудь задержку/возможность ре-трая параметрами при проверке статуса? (помню был параметр timeout_before_checking_execution_speed - может на ЗК водится что-нибудь подобное) ну или возможно набор сеттингов для ЗК с потенциально лагающей сетью?
3 - может ли засада таиться в том что разные процессы хэндлят и почему-то не договорились по нодам/локам/...? -
-
mondrian ?
https://altinity.com/blog/accessing-clickhouse-from-excel-using-mondrian-rolap-engineAccessing ClickHouse from Excel using Mondrian ROLAP engineClickHouse is a very powerful database for analytics. Microsoft Excel is one of the world’s most popular business applications. There are several ways to bring ClickHouse data to Excel spreadsheets. In this article we will explain how to connect Excel to ClickHouse using the Mondrian OLAP server. This approach has been pioneered in Sergei Semenkov’s[...]
-
Коллеги добрый день! При добавлении настройки из примера документации
<http_handlers>
<rule>
<url><![CDATA[/query_param_with_url/\w+/(?P<name_1>[^/]+)(/(?P<name_2>[^/]+))?]]></url>
<method>GET</method>
<headers>
<XXX>TEST_HEADER_VALUE</XXX>
<PARAMS_XXX><![CDATA[(?P<name_1>[^/]+)(/(?P<name_2>[^/]+))?]]></PARAMS_XXX>
</headers>
<handler>
<type>predefined_query_handler</type>
<query>SELECT value FROM system.settings WHERE name = {name_1:String}</query>
<query>SELECT name, value FROM system.settings WHERE name = {name_2:String}</query>
</handler>
</rule>
</http_handlers>
отваливается порт 8123 и, соответственно запрос curl-ом из документации выполнить нет никакой возможности. Запрос на 9000 порт даёт отлуп -- мол, http запросы только на 8123! Непонятно, как это вылечить. Очень хочется воспользоваться хендлером. Подскажите пожалуйста! Версия свежая, установлена на чистую машину. -
Спасибо. Saiku тоже на mondrian. Может еще что есть?
-
Не знаю таких
-
Добрый день, вопрос уточнение:
Это правда, что при использовании clickhouse-copier единственный правильный способ пополнить xml для задач это получить список таблиц и engine через таблицу system.tables?
И где-то был комментарий, что в новой версии copier не нужно создавать таблицу на целевом кластере -
-
Всем привет, столкнулся с такой ошибкой:
<Error> DynamicQueryHandler: Code: 999, e.displayText() = Coordination::Exception: Session expired (Session expired): While executing Tables, Stack trace (when copying this message, always include the lines below):
при селекте: Select * from system.tables
На гитхабе писалось что это исправленный баг
Версия кликхауса 20.8.3.18 -
Полный текст ошибки:
<Error> DynamicQueryHandler: Code: 999, e.displayText() = Coordination::Exception: Session expired (Session expired): While executing Tables, Stack trace (when copying this message, always include the lines below):
0. Poco::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x13cd24bc in /usr/bin/clickhouse
1. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0xa4346c9 in /usr/bin/clickhouse
2. Coordination::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Coordination::Error, int) @ 0x1199f4e4 in /usr/bin/clickhouse
3. Coordination::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Coordination::Error) @ 0x1199fb7a in /usr/bin/clickhouse
4. ? @ 0xa042c1d in /usr/bin/clickhouse
5. Coordination::ZooKeeper::get(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (Coordination::GetResponse const&)>, std::__1::function<void (Coordination::WatchResponse const&)>) @ 0x119b6f65 in /usr/bin/clickhouse
6. zkutil::ZooKeeper::getImpl(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> >&, Coordination::Stat*, std::__1::function<void (Coordination::WatchResponse const&)>) @ 0x119a5cb5 in /usr/bin/clickhouse
7. zkutil::ZooKeeper::tryGet(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> >&, Coordination::Stat*, std::__1::shared_ptr<Poco::Event> const&, Coordination::Error*) @ 0x119a5e97 in /usr/bin/clickhouse
8. DB::StorageReplicatedMergeTree::getMaxAddedBlocks() const @ 0x10fdb687 in /usr/bin/clickhouse
9. DB::StorageReplicatedMergeTree::totalRows() const @ 0x10fdbef1 in /usr/bin/clickhouse
10. DB::TablesBlockSource::generate() @ 0x1082660a in /usr/bin/clickhouse
11. DB::ISource::work() @ 0x112719d7 in /usr/bin/clickhouse
12. DB::SourceWithProgress::work() @ 0x113f356f in /usr/bin/clickhouse
13. ? @ 0x1129478e in /usr/bin/clickhouse
14. ? @ 0x11298748 in /usr/bin/clickhouse
15. DB::PipelineExecutor::executeImpl(unsigned long) @ 0x11298f96 in /usr/bin/clickhouse
16. DB::PipelineExecutor::execute(unsigned long) @ 0x112999ed in /usr/bin/clickhouse
17. DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::__1::function<void (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::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)>) @ 0x10e10699 in /usr/bin/clickhouse
18. DB::HTTPHandler::processQuery(DB::Context&, Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&) @ 0x117e3a2e in /usr/bin/clickhouse
19. DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&) @ 0x117e7260 in /usr/bin/clickhouse
20. Poco::Net::HTTPServerConnection::run() @ 0x13c1466e in /usr/bin/clickhouse
21. Poco::Net::TCPServerConnection::start() @ 0x13c11197 in /usr/bin/clickhouse
22. Poco::Net::TCPServerDispatcher::run() @ 0x13c1158b in /usr/bin/clickhouse
23. Poco::PooledThread::run() @ 0x13d481ae in /usr/bin/clickhouse
24. Poco::ThreadImpl::runnableEntry(void*) @ 0x13d44ea9 in /usr/bin/clickhouse
25. start_thread @ 0x7dd5 in /usr/lib64/libpthread-2.17.so
26. __clone @ 0xfdead in /usr/lib64/libc-2.17.so
(version 20.8.3.18) -
А как правильно? Я хотел по-разному агрегировать разные столбцы: для счётчика считать сумму, а для текстового описания - иметь последнее значение.
-
-
https://www.ibm.com/docs/en/was-liberty/core?topic=manually-xml-escape-characters
Так это XML правила смотреть надоXML escape charactersYou need to escape specific XML characters in Liberty configuration files, such as the server.xml file because Liberty does not automatically escape these characters. If you use the Rational Application Developer tool, you do not need to manually escape these characters.
-
Оу, спасибище
-
такого нет, есть maxMap/argMax, но нужно что-то типа lastMap
https://github.com/ClickHouse/ClickHouse/issues/21805lastMap, firstMap/anyMap, mergeMap/mapMerge for aggregating/merging arrays (like maxMap but for strings and etc) · Issue #21805 · ClickHouse/ClickHouseI'm working on simple backend for amplitude sdk. My backend can get events from clients, put it in clickhouse and I can view data in metabase. Use case I have: table events (MergeTree, os, ...
-
хотя наверно неправильно понял ваше сообщение. вам нужно SimpleAggregateFunction(argMax, Tuple(String, DateTime)) вместо SimpleAggregateFunction(argMax, String, DateTime)
-
Can't initialize pipeline with empty pipe.: While executing Remote (version 21.4.4.30 (official build)) · Issue #23431 · ClickHouse/ClickHouse
CREATE TABLE ladnl.dnl_log ( event_date Date, date_id UInt64, tm FixedString(8), dt DateTime DEFAULT toDateTime(concat(toString(event_date), ' ', tm)), host_id UInt32, ip Int32, cc ...
-
Подскажите пожалуйста какой системный параметр КХ может отбивать concurrent сессии. У нас когда запускаются одновременных >3 сессий вставок в сервер, идет отбитие
-
Ошибку хоть покажите
-
на стороне КХ ошибок не видим, но стороне nifi IOException thrown from InvokeHTTP[id=3a0966a1-6338-3490-8811-8115f338bc44]: java.net.SocketException: Broken pipe (Write failed)
-
отбитие чего? ;) почек? пяток? копчика? гонга на ринге ;)
-
отбитие сессии
-
tcpdump -w clickhouse.pcap -i any port 8123
и дальше смотреть где соединение рвется
может у вас криво socket pool на nifi стороне реализован как нибудь
ищите TCP RST и т.п. вещи -
спасибо. попробуем протейсить
-
[root@bi-ckh1-02-2 clickhouse-server]# tcpdump -w clickhouse.pcap -i any port 8123
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
---воспроизвели ошибку, но здесь ничего не отобразилось.. -
что это может значить?
-
Привет. Возник вопрос про работу select на распределенной таблице. Помогите, пожалуйста.
Есть распределенная табличка, у удаленной таблицы задан ключ сортировки. Хочу поселектить все данные из таблички (возможно с потерями самых свежих изменений), но кусочками не больше фиксированного размера. Нашла, что можно делать select ... limit x offset y. Смогу ли я это сделать последовательно сдвигая offset или распределенность может мне помешать? -
у вас файл создался clickhouse.pcap
его откройте в wireshark
и там ищите tcp rst и т.п. вещи -
спасибо)
-
смотрите как это работает
"distributed" таблица
читает данные из "таблица" указанной в ENGINE Distributed('cluster_name',база, таблица) на всех шардах которые указаны в <remote_servers> секции в конфиге для заданного <cluster_name>
в момент чтения на шарды отправляются переписанные SQL запросы у которых initial_query_id стоит как query_id от вашего исходного SQL запроса, запросы переписываются так чтобы максимальное кол-во работы было выполнено на шардах в подзапросах
дальше результаты потоково читаются на ноде инициаторе distributed запроса
и финальная аггрегация и сортировка уже идет на ней
соответсвенно если вы хотите прочитать SELECT * FROM distribued_table ORDER BY key LIMIT X OFFEST Y
то каждый раз у вас будет идти сортировка на ноде инициаторе
такой запрос умрет у вас по памяти если данных много
сама конструкция LIMIT X OFFEST Y
означает что сначала будет прочитано Y записей, потом еще X и эти X будут отданы клиенту...
то есть 100 запросов LIMIT 10 OFFSET 10000
прочитают 100 раз по 10000 записей
зачем вам понадобилось вычитать ВСЮ таблицу с разбивкой на "кусочки"? вы хотите какой то экспорт сделать? -
-
Да, хочется сделать экспорт, но нет уверенности, что вся таблица влезет в память.
-
А вариант
SELECT * FROM distribued_table WHERE key > last_batch_greatest_key ORDER BY key LIMIT x WITH TIES
лучше подходит? Правильно я понимаю, что в этом случае сортировка будет на каждом шарде, потом мержинг и лимитирование? -
помогите с проблемой. В цикле крутится обычный запрос на выборку с условием и группировкой. Через какое-то время падает с ошибкой
Query error: Code: 241, e.displayText() = DB::Exception: Memory limit (total) exceeded: would use 21.19 GiB (attempt to allocate chunk of 4219266 bytes), maximum: 21.19 GiB: (while reading column earnings): (while reading from part /var/lib/clickhouse/data/rpdev/cumulative_table/123_3_3_0/ from mark 1 with max_rows_to_read = 8192): While executing MergeTreeThread (version 20.9.3.45 (official build))
max_memory_usage не трогал. Вычитал что возможно это проблема из-за группировки. Выставил
max_bytes_before_external_group_by = 8000000000
distributed_aggregation_memory_efficient = 1
ошибка та же -
да, это лучше
сначала на шарде будет отброшены все парты которые условию не удовлетворяют
потом по x записей с каждого шарда
финальная сортировка
и x записей с клиента
но надо проверять через
SET send_logs_level='trace';
SELECT ...
происходит ли срабатывание LIMIT в подзапросах -
сколько таких запросов парарлельно?
SELECT formatReadableSize(memory_usage), query FROM system.query_log WHERE memory_usage > 0 ORDER BY event_time DESC LIMIT 100; -
Добрый день! Подскажите, работает ли tabix с версией 21.4.4.30? При попытке подключения выдаёт ошибку связанную с словарями. Code: 47, e.displayText() = DB::Exception: Missing columns: 'key' while processing query: 'SELECT name, key, attribute.names, attribute.types FROM system.dictionaries ARRAY JOIN attribute ORDER BY name ASC, attribute.names ASC', required columns: 'name' 'key', maybe you meant: ['name'], arrayJoin columns: 'attribute.names' 'attribute.types' (version 21.4.4.30 (official build))
-
Спасибо!
-
php крутит цикл. Должен быть 1. Но не исключено что к кх делает запрос кто-то еще
-
поменяли структуру таблицы
вот в этом коммите
https://github.com/ClickHouse/ClickHouse/commit/a53c90e509d0ab9596e73747f085cf0191284311
думаю можно issue завести в tabix и в clickhouse github
и автора коммита упомянутьUpated system.dictionaries table · ClickHouse/ClickHouse@a53c90eClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
попробуйте по времени вашей ошибки найти кто еще ест память
вот так точное время ошибки найдете
SELECT event_time, formatReadableSize(memory_usage), query FROM system.query_log WHERE memory_usage > 0 AND type!='QueryFinish' ORDER BY event_time DESC LIMIT 100;
а потом просто
SELECT event_time, formatReadableSize(memory_usage), query FROM system.query_log WHERE memory_usage > 0 AND event_time BETWEEN ${error_event_time} - INTERVAL 1 MINUTE AND $error_event_time + INTERVAL 1 MINUTE ORDER BY event_time DESC;
и вот это еще посмотрите
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-who-ate-my-memory -
неужели никто не сталкивался?
-
последнее падение в 2021-04-21 15:46:29
-
-
если интересно это "net/url" виноват. Чтобы использовать подобные символы в значениях в dsn, нужно сделать с ними urlencode, т.е. + это %2B. Тогда работает.
-
Здравствуйте!
Коллеги, получается, в случае каких-либо ошибок, препятствующих Distributed таблице (в асинхронном режиме) разослать по шардам bin-файлы очередного запроса, нет НИКАКОГО способа исправить эту ситуацию, кроме как удалить вручную файлы в файловой системе?
А если продуктивная среда, где возможности удалять файлы внутри поддиректорий clickhouse нет? И проблемная асинхронная вставка так и будет до бесконечности перезапускаться каждые distributed_directory_monitor_max_sleep_time_ms миллисекунд? -
Допустим, в какой-то момент сработал предохранитель max_partitions_per_insert_block (одна из причин, которая может привести к невозможности асинхронной Distributed таблице разослать данные по шардам). После этого уже поздно max_partitions_per_insert_block в 0 выставлять в профиле - в настройках несработавшей вставки то осталось старое значение max_partitions_per_insert_block.
initial_query_id не сработавшей вставки известен, но толку от этого, если всё время новое query_id порождается (и завершается ошибкой).
SYSTEM STOP DISTRIBUTED - остановит все последующие вставки. Не годится.
SYSTEM FLUSH DISTRIBUTED - выдаст exception (который и так постоянно по таймеру происходит), но bin файлы и настройки initial_query_id которые их не могут разослать, остались.
https://github.com/ClickHouse/ClickHouse/issues/17380
"Another issue that Distributed table tries to insert into underlying table indefinitely.
It needs some stopper. For example after some number of tries/errors block insert into Distributed for example to signal to a client."More reliable async inserts into Distributed · Issue #17380 · ClickHouse/ClickHousesupport fsync after insert into Distributed (i saw many times damaged files in distributed tables after hard restarts) mechanism similar to "Too many parts" when inserting to Dist...
-
Спасибо, завёл
-
-
DROP TABLE db.distributed_table ON CLUSTER
вроде как почистит .bin файлы
CREATE TABLE ... ON CLUSTER
создаст каталоги с нуля
вообще предполагается что скопления .bin файлов у вас быть не должно
если <remote_servers> правильно настроено
и кол-во реплик в каждом шарде больше 1
то при падении 1й реплики, данные должны литься на вторую...
а если у вас кривые настройки (авторизация, принимающая сторона не содержит таблицу, или содержит таблицу не той структуры), то это надо настройки править, а не .bin файлы удалять -
по всем запросом результаты меньше 3.75 MiB за исключением последнего, но там все запросы к system.query_log
-
Да, действительно! Что-то мне в голову не пришло:( - Distributed таблицу же не страшно прибивать и пересоздавать. Не догадался.
Спасибо -
правильно с tuple SimpleAggregateFunction(argMax, Tuple(String, DateTime))
!!! но вообще я бы начал пробовать с SimpleAggregateFunction(anyLast,String) -
SELECT formatReadableSize(memory_usage), toStartOfHour(event_time) h
FROM system.query_log
WHERE event_date = toDate(now())
GROUP BY h
никакого роста нет?
SELECT event_time,formatReadableSize(CurrentMetric_MemoryTracking) FROM system.metric_log WHERE event_time BETWEEN toDateTime($last_error_time) - INTERVAL 1 MINUTE AND toDateTime($last_error_time); -
скрин - первый запрос отсортированный по памяти. Второй, пишет что нет такой таблицы
DB::Exception: Table system.metric_log doesn't exist. (version 20.9.3.45 (official build)) -
она видимо у вас выключена
она включается отдельной настройкой
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#metric_logServer Settings | ClickHouse DocumentationServer Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli
-
Без ее никак? Нельзя сейчас ребутнуть сервер
-
SELECT formatReadableSize(memory_usage) AS memory, count() AS queries, toStartOfMinute(event_time) t
FROM system.query_log
WHERE event_time BETWEEN toDateTime('2021-04-21 15:40:00') AND toDateTime('2021-04-21 15:50:00')
GROUP BY t -
ну что-то же у вас память отожрало
ну еще посмотрите в /var/log/clickhouse-server/clickhouse-server.log
на время вашей ошибки
и посмотрите там какие запросы выполнялись непосдерственно до запроса который упал у вас по памяти -
Здравствуйте. А что произойдет с колонкой не State типа в AggregatingMergeTree во время мерджа строк?
-
Если добавить колонку дейттайм для ттл в такую таблицу, будет ли в ней lasr значение или что после мерджа?
-
-
uniqExactArray(leadContactList)
-
> sum(arrayUniq(leadContactList))
Посчитает сумму юников в каждой строке -
-
поставил в php слип в 0.1 секунду. Не знаю связано это с этим или нет, но уже второй час без падений. Может ли быть такое что php отдавал много запросов в секунду?
-
если нужна последняя дата, попробуйте SimpleAggregateFunction(max, <date_column>)
-
а коннект к HTTP у вас закрывался ? или это все было в рамках одного HTTP коннекта?
-
Коннект закрывается только по окончанию работы скрипта. Все в рамках одного Коннекта
-
Добрый день!
Столкнулся с проблемой при при переводе тайм зоны.
Код запроса:
toDateTime(data, 'Europe/Moscow')
Где data - поле которое переводим из UTS в 'Europe/Moscow.
Но при компиляции функция toDateTime() возвращает то же самое значение что и принимает, то есть время не меняется.
С чем может быть связано? -
-
Всем привет, а как лучше оптимизировать группировки, у меня есть узкая таблица, с двумя полями - id и value, но довольно объемная - несколько сотен гигов, хочется постоянно джойнить какие-то семплы айдишников по id и группировать по полю value, может ли как-то помочь AggregatingMergeTree ?
-
Добрый вечер.
Как можно очистить таблицу? -
Как и везде, truncate
-
TRUNCATE TABLE table выдает ошибку
Table or Partition in default.table was not dropped. -
1. Size (69.07 GB) is greater than max_[table/partition]_size_to_drop (50.00 GB)
2. File '/var/lib/clickhouse/flags/force_drop_table' intended to force DROP doesn't exist -
-
на сервер нет доступа чтобы изменить параметр. можно как то вывести какие партиции есть в базе чтобы по партициям поудалять?
-
Добрый вечер. делаю селект в дистрибутивную таблицу. Запрос без group by, order by. Единственное , что есть это обращения к dictGetString(). Через некоторое время стабильно - "Attempt to read after eof: error". Немного погуглив нашел https://github.com/ClickHouse/ClickHouse/issues/5618. И действительно, в dmesg вижу что убили за OOM. Как я понял, конечного решения для таких запросов вообще нет ( настройки чтобы дампить на диск есть только для group by и order by. Что делать?Attempt to read after eof and click house services shutting down · Issue #5618 · ClickHouse/ClickHouse
i am trying to group by a distributed tables (~100 million records ) so two interesting issues are happening 1)It is throwing "Attempt to read after eof: error" 2)click house serv...
-
select ... from system.parts ... group by partition
-
запустить запрос с трейсом, попробовать без словаря. вылетать может изза Join тоже например
если непонятно - запустить запрос непосредственно на шарде и посмотреть почему он вылетает... -
Добрый вечер!
Есть две таблицы statistics_filters MergeTree і statistics_counters SummingMergeTree
SELECT
sf.*,
sc.*
FROM (
SELECT * FROM statistics_filters
WHERE filter1 = 11
AND date between '2020-01-01 00:00:00' AND '2021-04-01 00:00:00'
AND filter2 in (1, 4)
) AS sf
INNER JOIN (
SELECT *
FROM statistics_counters
WHERE filter_id IN (
SELECT id
FROM statistics_filters
WHERE filter1 = 11
AND date between '2020-01-01 00:00:00' AND '2021-04-01 00:00:00'
AND filter2 in (1, 4)
)
) AS sc
ON sf.id = bc.filter_id
ORDER BY bc.counter1 DESC
LIMIT 50;
есть ли возможность упростить запрос (обойтись без дублирования запроса statistics_filters) при этом не джоинить всю таблицу statistics_counters.
Данные нужны с обеих таблиц -
-
-
-
-
-
-
-
Было такое при некорректном запросе где start было больше end
-
-
DataGrip другие таблы читаются. Ну я ее целиком без старта пытаюсь читаьь тоже ошибка
-
Через https://github.com/smi2/phpClickHouse такая же ошибка при чтении падаетGitHub - smi2/phpClickHouse: php ClickHouse wrapper
php ClickHouse wrapper. Contribute to smi2/phpClickHouse development by creating an account on GitHub.
-
Добрый вечер. Извините за нубский вопрос, а можно ли кликхауз попросить проитерировать список функций(avg, max, quantile(0.95) и т.д) над списком полей (read_bytes, read_rows, memory_usage и т.д), не перечисляя их вручную все со всеми. Не знаю, с какой стороны подобраться к задаче.
-
Так, видимо лямда и массивы мне в помощь, сейчас попробую
-
Версия 20.12.4.5
SELECT DISTINCT всегда дает верный результат
SELECT GROUP BY иногда может давать меньше данных и через curl и через jdbc. ошибок в логах при этом нет. куда можно копать? размер результата curl - около 4GB -
Не проитерировать, но все же
https://clickhouse.tech/docs/ru/sql-reference/statements/select/#select-modifiersСинтаксис запросов SELECTСинтаксис запросов SELECT SELECT выполняет получение данных. [WITH expr_list|(subquery)] SELECT [DISTINCT [ON (column1,
-
апгрейд в 20.12.8.5 или read_backoff_min_latency_ms=0
https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aissue+read_backoff_min_latency_ms+is%3Aclosed -
версия КХ ?
-
Спасибо большое 😌
-
19.14
-
select version()
-
19.14.13.4
-
а тип поля ? LowCardinality есть?
таблица Distributed? -
Спасибо большое! APPLY - отличная штука. Жаль, у меня более старая версия клика, но на будущее возьму на заметку
-
В одной таблице на поле Uint8 в другой на стринге. Нет
-
-
skip индексы?
-
-
Нет
-
ошибка повторятся если запрос повторять?
попробуйте сделать system drop mark cache интересно вылечит на какое-то время или нет -
Да. Там таблица есть на 250гб все к херам не повиснет без кэша?) я не спец)
-
-
Да
https://github.com/ClickHouse/ClickHouse/pull/16423Balanced reading from JBOD by amosbird · Pull Request #16423 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): Improvement Changelog entry (a user-readable short description of the cha...
-
Трабла с таблицами тинилог
-
Благодарю.
-
так надо было с этого начинать.
вы в tinylog данные храните?
они не предназначены для хранения и портятся при рестартах -
и одновременных инсертах / селектах
-
Только временно в течении минуты и сливаем в мержтри
-
Рестарта не было залиты были часов 8 назад
-
Одновременных инсертов тоже все через очередь
-
-
-
-
память ECC у сервера?
-
-
-
что? не понял что вы увеличили и что закончилось?
-
-
ECC-память
Оперативная память с коррекцией ошибок
-
Честно говоря без понятия как это выяснить, первый раз такой термин вижу. Кластер на облаке стоит яндекса
-
-
-
- 22 April 2021 (212 messages)
-
Привет! Тут можно задать вопрос про деплой на cloud run flask?
Хочу часть etl на python перенести с sql. -
ну подробности внутрянки AWS скорее оффтопик
а что конкретно хотите сделать то? ;)
и что не получается? -
это google cloud run)
западелоил докер контейнер и выдает Service Unavailable, пример
локальна просто запускается( -
Лучше спросить тут
https://t.me/goo_cloud_ru
и тут
https://t.me/gcp_ruGoogle Cloud Platform_ruРусскоязычное обсуждение google_cloud_platform
-
спс за чатики
-
так. это надо посмотреть
честно говоря не ожидал увидеть HTTP в списке поддерживаемых источников для cached layout
я бы предложил словарь на http выложить и сделать tcpdump -i any -w cached_dictionary.pcap port 80 и потом wireshark посмотреть -
вариантов не много, либо в URL либо в query string
либо в POST request body добавлять будет
но скорее в URL или в query string
с точки зрения REST это же GET запрос -
Спасибо большое! проверим
-
-
Всем привет!
Подскажите может ли clichouse-copier перенести данные из старой инсталляции в новую с изменением параметров таблицы PARTITION BY и ORDER BY:
было:
ENGINE = MergeTree()
PARTITION BY Date
ORDER BY (Date, intHash32(ClientID))
стало:
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{database}/{shard}/{table}', '{replica}')
PARTITION BY (Date, jumpConsistentHash(cityHash64(toString(ClientID)), 64))
ORDER BY (Date, intHash32(ClientID))
Данные переливаются из Clickhouse 20.9.3.45 -> 21.4.3.21, но так же пробовал перенести данные в рамках одной инсталляции на версии 21.4.3.21.
При использовании clichouse-copier 20.3, после нескольких минут после запуска копирования получаю записи в лог и копирование останавливается:
2021.04.22 05:08:46.703051 [ 1 ] {} <Debug> ClusterCopier: Execute distributed DROP PARTITION: ALTER TABLE test_db.test_table DROP PARTITION ('2020-10-11',2)
Насколья я понимаю clichouse-copier пытается проверить скопированные данные, но из-за изменения партиционирования это не выходит?
При использовании clichouse-copier 21.4:
2021.04.22 05:27:50.025991 [ 44 ] {} <Trace> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): (node-01.clickhouse.example.com:9000) Cancelling query
2021.04.22 05:27:50.026286 [ 44 ] {} <Debug> ClusterCopier: Partition ('2020-03-02',51) piece number 0 is PRESENT on shard N1 (having a replica node-01.clickhouse.example.com:9000, pull table test_db.table of cluster source_cluster
2021.04.22 05:27:50.026317 [ 44 ] {} <Trace> Connection (node-01.clickhouse.example.com:9000): Connecting. Database: default. User: default
2021.04.22 05:27:50.026920 [ 44 ] {} <Trace> Connection (node-01.clickhouse.example.com:9000): Connected to ClickHouse server version 21.4.3.
2021.04.22 05:27:50.029163 [ 44 ] {} <Debug> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): Joining background threads for async INSERT
2021.04.22 05:27:50.029180 [ 44 ] {} <Debug> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): Background threads for async INSERT joined
2021.04.22 05:27:50.029194 [ 44 ] {} <Debug> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): Joining background threads for async INSERT
2021.04.22 05:27:50.029198 [ 44 ] {} <Debug> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): Background threads for async INSERT joined
2021.04.22 05:27:50.029203 [ 44 ] {} <Debug> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): Removing pending blocks for async INSERT from filesystem on DROP TABLE
2021.04.22 05:27:50.029296 [ 44 ] {} <Debug> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): Removed
2021.04.22 05:27:50.029676 [ 44 ] {} <Debug> StorageDistributed (.read_shard_0.destination_cluster.test_db.test_table): Auto-increment is 0
2021.04.22 05:27:50.029723 [ 44 ] {} <Debug> ClusterCopier: Checking shard N1 (having a replica node-01.clickhouse.example.com:9000, pull table test_db.table of cluster source_cluster for partition ('2020-03-02',52) piece 0 existence, executing query: SELECT 1 FROM _local.`.read_shard_0.destination_cluster.test_db.test_table` WHERE ((Date, jumpConsistentHash(cityHash64(toString(ClientID)), 64)) = (('2020-03-02',52) AS partition_key)) AND (cityHash64(`Date`, intHash32(`ClientID`)) % 1 = 0 ) LIMIT 1
2021.04.22 05:27:50.030999 [ 44 ] {} <Trace> InterpreterSelectQuery: Complete -> Complete
Подобные записи будут постоянно в логе, но данные так и не начнут переноситься.
Может быть есть какие-то рекомендации как лучше переносить таблицы с изменением PARTITION BY и ORDER BY? -
В теле POST в формате из настроек будет отправлен список ключей
-
А как вы записываете данные на шард? Через distributed? Или приложение само пишет на разные шарды?
-
что значит "выпал шард"? в смысле clickhouse-server на хостах шарда запущен, но реплики шарда по сети недоступны для остальных реплик? или вы реплики шарда из remote_servers убрали на всех серверах?
-
-
о, спасибо, надо бы патч сделать в документацию
потому что для какого нибудь REDIS и SQL понятно примерно что будет запрос по ключам и как
а для HTTP не ясно было как оно работает -
Через дистр, при чем дистр таблица на каждой реплике
-
Afaik: тогда данные останутся в очереди в distributed таблице ожидая возвращение шарда. В каталоге таблицы будут Бин файлы с запросами на выставку. Посмотрите, если есть зависшие(по mtime), то это ваш случай.
-
вы вставку делаете через ENGINE=Distributed таблицу
ок. а какую библиотеку на клиенте используете?
перед кластером clickhouse какой-то load balancer стоит типа chproxy? или напрямую ноды вибираете?
каждый INSERT в Distributed
порождает сначала временные файлы .bin на ноде инициаторе, в котором разбитые по sharding key данные лежат
дальше эти данные пушатся на удаленные ноды из remote_servers
если ноды недоступны то данные лежат в distributed в /var/lib/clickhouse/data/db/distributed_tabel_name/host+реплики:port/*.bin, пока ноды не будут доступны
тут все подробно описано
https://clickhouse.tech/docs/en/engines/table-engines/special/distributed/Distributed | ClickHouse DocumentationDistributed Table Engine Tables with Distributed engine do not store any data by their own, but allow distributed query
-
Выше все подробно расписали. Но если у вас шард состоит из больше, чем одной реплики, то данные уйдут на первую живую
-
Можно ли сделать так, чтобы локальный КХ выступал в роли кэша для основного (удаленного) инстанса, который сам, когда нужно, синхронизируется с основной (удаленной) базой?
Зачем это нужно: соединение до основного инстанса нестабильное, данных льется много и часто. Поэтому необходимо лепить какие-то свои буферизации с использованием примитивных средств, которые не функциональны (по ним, например, выборку не сделаешь). Что хочется: делать вставки и выборки из локального инстанса, а он бы предоставлял актуальные результаты, и выполнял бы в фоне вставки в основной инстанс. -
Использовать два сервера и таблицу с репликацией?
-
Используем ivi библиотеку для флинка. Она на прямую льет в указанные дистр таблицы. Теперь сам отвечу, если дистр таблица будет не доступна данные будут откинуты в директорию с failed.
P.S. при непродолжительных тестах, данные не откидывались в failed.
Спасибо за информацию по дистр таблицам. -
Репликация, как я понимаю, будет хранить все данные этой таблицы на обоих серверах? если так, то это (в моем случае) будет требовать слишком много места в локальном инстансе.
-
вы имеете ввиду папку failed на стороне apache flink?
-
Да
-
IMHO вы сами себе противоречите
с одной стороны вам выборки по данным нужны
с другой стороны вы данные вставлять не можете
данные либо в кластере clickhouse
либо нет
может вам не все данные для выборок нужны?
как вариант храните данные в промежуточном формате типа /data/table_name-YYYY-MM-DD-random_number.TSV.gz
и делайте выборки из них через локальный clickhouse с использованием табличной функции`file(path='/data/table_name*.tsv.gz' )
https://clickhouse.tech/docs/en/sql-reference/table-functions/file/
а к удаленному серверу если он один через remoteSecure или remote ходите
https://clickhouse.tech/docs/en/sql-reference/table-functions/remote/
и делайте на локальном clickhouse instance выборку через
SELECT ... FROM file(...) AS local
WHERE
UNION ALL
SELECT ... remote(...) AS remote
WHERE
и в крон вставку в удаленный сервер делайте по cron
можно даже средствами clickhouse
INSERT INTO remote(....) SELECT ... FROM file(...)
и потом тупо
rm -rf *.tar.gz локально если данные вставились
можно даже clickhouse server не поднимать на машине где данные аккумулируете
а использовать clickhouse-local
https://clickhouse.tech/docs/en/operations/utilities/clickhouse-local/file | ClickHouse Documentationfile Creates a table from a file. This table function is similar to url and hdfs ones. file function can be used in SELE
-
Я, честно говоря, не понял, в чем противоречие. В порядке аналогии. Ядро процессора работает со своим ограниченным L1, получается любые данные, вставляет любые данные. А когда данные окажутся на реальном носителе и синхронизация между ядрами — вопрос другой. Это называется кэшем. Так вот, я интересуюсь, умеет ли КХ решать эту задачу своими средствами.
Да, это чем-то похоже на репликацию, но у меня нет возможности хранить все данные в локальном инстансе -
Сейчас я буферизую данные на вставку своими средствами, они лежат мертвым грузом и ждут момента отправки на основной инстанс. До этого времени эти данные недоступны для выборки.
Я же хочу делать запросы по выборкам и вставкам только к локальному инстансу, а удаленный использовать, фактически, как хранилище.
Если еще точнее. Я делаю сервис получения данных (таким образом абстрагируя клиента от КХ). Он будет вставлять и выбирать данные, но он не может решать задачу хранения большого объема данных. -
Решение без буферизации вполне себе работает (когда данные напрямую летят в основную базу), но я хочу подстраховаться на случай сетевой недоступности базы. Т.к. в основном нужны данные не более чем за несколько суток.
-
Добрый день!
Сориентируйте как подсчитать необходимый объем диска для КХ? Так же как подсчитать объем для индексов отдельно? -
ну, посмотрите насколько медленно работает CPU относительно возможностей своего ALU
когда данные в L1\L2 кеш не пролезают
кеш мисс с точки зрения CPU очень дорогая в тактах операция
теперь умножайте это все на 3-4 порядка, получите масштабы бедствия когда вам надо будет по вашей нестабильной сети на "локальный инстанс" что-то выбрать с удаленного
решение для вашего случая я привел, вы уж его прочитайте -
Да, я его прочитал, спасибо! Выглядит существенно лучше, чем то, как реализовано сейчас.
-
посчитать объем ваших сырых данных без сжатия можете?
коэффициент сжатия в clickhouse обычно в районе x5
вот так примерно и считайте
если надо прямо точно
то вставляйте данные живые
и потом через system.disk и system.parts
делайте запросы по которым сможете понять когда диск заполнится
всякие системы мониторинга сейчас не плохо научились предсказывать через сколько времени диск заполнится
https://www.zabbix.com/documentation/current/ru/manual/config/triggers/prediction
https://github.com/nfrumkin/forecast-prometheusGitHub - nfrumkin/forecast-prometheus: A collection of analysis, and machine learning techniques for time series forecasting w/ Prometheus metricsA collection of analysis, and machine learning techniques for time series forecasting w/ Prometheus metrics - GitHub - nfrumkin/forecast-prometheus: A collection of analysis, and machine learning t...
-
https://clickhouse.tech/docs/en/operations/system-tables/parts/
https://clickhouse.tech/docs/en/operations/system-tables/disks/system.parts | ClickHouse Documentationsystem.parts Contains information about parts of MergeTree tables. Each row describes one data part. Columns: partition
-
Ребят, можно ли как то быстро в клике вставить кучу данных в одну новую колонку в разные партиции таблицы?
-
Привет. Есть материализованная вьюшка AggregatingMergeTree но селект с нее с groupby и мерджем агрегатов довольно долгий. Имеет ли смысла сделать с этого финального запроса еще одну материализованную вьюшку ReplacingMergeTree ?
-
В дополнение к рекомендации Slach выше добавлю, что в случае если на кону что-то серьёзное - sizing для будущего продуктива или типа того, то всё же стоит на практике проверять.
Слишком много всего влияет на результат, чтобы теоретической прикидкой получилось бы более-менее точно угадать. Один лишь порядок полей в ORDER BY основной таблицы фактов (если схема данных у вас ещё не установилась) может радикально, в разы изменить сжатие данных.
Причём стоит вдумчиво определять какие параметры тестового стенда должны соответствовать реальным. Так если вы в свою схему будете загружать небольшую выборку данных (по сравнению с размером, который эти же данные занимали бы для полной партиции), то может получиться отличающийся коэффициент сжатия. То есть по-хорошему для проверки должно быть не "загрузить 1 млн записей и посмотреть средний размер записи", а, например, "загрузить пару дней реальных данных в случае toYYYYMMDD партиционирования" -
-
-
Всем привет. Делаю вставку в таблицу где двумерный массив.
Ругается на поле
Code: 349, e.displayText() = DB::Exception: Cannot convert NULL value to non-Nullable type: while converting source column sharesInfoList to destination column sharesInfoList (version 20.9.2.20 (official build))
Добавил проверку
if(isNull(viewSharesJoin.sharesInfoList), [[]], viewSharesJoin.sharesInfoList) as sharesInfoList
Но ничего не изменилось.
Что я делаю не так?
Nullable на массивы не применяется как я понимаю -
Ну если думать о разного рода костылях, то можно попробовать такое решение: пишете в локальную таблицу с ограничением по сроку хранения данных(ттл в ваши несколько дней), над ней Матвью, которая пишет все данные из вашей таблицы в локальную distributed, а та в свою очередь пишет в удалённую. При недоступности удалённой ноды данные на вставку будут буферизироваться в distributed. Ну и сверху ещё какую-то Вью, если вам нужно данные получать из обеих таблиц, локальной и удаленной. Хер знает, что у этого решения с производительностью будет и что ещё на нем можно отхватить. //В общем, если я ничего не напутал здесь
-
-
-
-
grant select on db.table to user username
-
Тут же в sql запросе?
-
-
а вы хотите через xml добавить прав?
-
сервер может лежит?
Смотрели логи сервера? -
через jdbc до сервер доступен, есть ощущение что это из-за того что вчера на машине шатался brew, а клиент из терминала не выгружался, а сейчас вот вышел и все сломалось) буду пробовать пересобрать
-
clickhouse-client --log-level=trace -h host -u user --password=password
попробуйте -
спасибо, я уже снёс и пересобираю) там никаких реакций не было даже на clickhouse-client без параметров
-
ну вообще clickhouse-client это симлинк на clickhouse
так что вполне возможно вы как то сервер не так собрали -
не, оно работало, просто вчера я сносил на ноуте brew и видимо какие то пакеты не доставил из-за чего запущенный клиент еще сегодня работал, а после того как я вышел из него он перестал запускаться
-
подскажите пожалуйста, как можно проверить сколько concurrent sessions на базе КХ?
-
подскажите пожалуйста, как можно проверить сколько concurrent sessions на базе КХ?
-
Добрый день.
Подскажите, пожалуйста, что делать с ошибкой
The local set of parts of table ... doesn't look like the set of parts in ZooKeeper: 79.38 million rows of 121.11 million total rows in filesystem are suspicious. There are 1 unexpected parts with 79383828 rows (1 of them is not just-written with 79383828 rows), 1 missing parts (with 410367 blocks).: Cannot attach table -
сделали rsync из старого datadir в новый, потом остановили CH, сделали еще раз rsync, переключились на новый datadir - и все
-
теперь ни туда ни сюда
-
u mean this:
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#max-concurrent-queries
???Server Settings | ClickHouse DocumentationServer Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli
-
а можно видеть и отслеживать текущее их состояние, какие сессии висят ,какие выполняются
-
не припоминаю такого, дайте контекст задачи, в чем проблема
-
есть типа system.processes только по сессиям
-
?
-
хотим понять причину socket timeouts на стороне nifi при вставке в КХ. Хотим убедиться что сессии не отваливаются из-за достижения лимита по concurrent sessions
-
-
это не история?
-
receive_timeout, send_timeout трогали, решали проблему вашу?
-
да,
http://10.16.197.76:8123/?format_csv_delimiter=;&max_partitions_per_insert_block=0&format_csv_allow_double_quotes=0&date_time_input_format=best_effort&receive_timeout=36000&send_timeout=360000&query=INSERT%20INTO%20RawDATA.EGCDR_DR2_original%20FORMAT%20CSV -
это настройки таймаута для кх
https://clickhouse.tech/docs/en/operations/settings/settings/#connect-timeout-receive-timeout-send-timeoutSettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
-
-
если у вас задача не пихать все из файла, а что-то просто из него забрать для чтения или вычитать некоторые данные, то имхо, юзать clickhouse-local:
https://clickhouse.tech/docs/en/operations/utilities/clickhouse-local/
или file engineclickhouse-local | ClickHouse Documentationclickhouse-local The clickhouse-local program enables you to perform fast processing on local files, without having to d
-
SELECT CurrentMetric_Query, event_time FROM system.metrics_log WHERE CurrentMetric_Query > 80 ORDER BY event_time DESC LIMIT 10;
-
DB::Exception: Table system.metrics_log doesn't exist. (version 20.8.3.18)
-
задача вставить весь файл
-
Добрый день, подскажите пожалуйста, имею проблему в DBeaver с отображением данных из колонок типа array[decimal] - вместо элементов массива отображается "DBCException: Can't extract array data from JDBC array". Вроде бы проблема не новая, есть шанс что ей занимаются и надежда что устранят? :)
-
system.metric_log
s названии лишняя -
подскажите пожалуйста заклинание как в консоли исключить вывод результата запроса? Оптимизирую запрос и нужно видеть только логи КХ, где-то как-то Алексей Миловидов показывал трюк на какой-то конференции чтоб результат запроса не выводился на экран, не могу найти где(
-
бага, либо на стороне dbeaver либо на стороне clickhouse-jdbc
заведите issue на https://github.com/dbeaver/dbeaver/issues/
кстати там где то еще log файл кажется был, можно там полный stacktrace ошибки поискатьIssues · dbeaver/dbeaverFree universal database tool and SQL client. Contribute to dbeaver/dbeaver development by creating an account on GitHub.
-
@chghehe, норм решение, я бы так и сделал если бы мне было нужно решать подобную задачу. но если клиент должен полностью абстрагироваться от кликхауса в случае запуска на слабом/специфическом железе, то в принципе можно локально и в sqlite пихать. и по крону отправлять из него данные в кликхаус сервер, используемый как хранилище.
-
всем привет
Подскажите пож-та какой формат нужно использовать для загрузки файла след структуры:
ид (int) , json (string)
Пример
123, {"k1":"v1","k2":"v2"} -
я обычно limit в конце ставлю
-
Спасибо за ответ, пока так тоже делаю, но по-моему limit может соптимизироваться и запрос выполнится не по эквивалентному плану
-
FORMAT Null
https://clickhouse.tech/docs/en/interfaces/formats/#null -
То что нужно! Благодарю!
-
Добрый день. Select из дистрибутивной завершается нехваткой памяти на сервере-инициаторе. ( всего 128 гб) В запрос нет джойнов, нет аггрегации и сортировки. Используются только словари. Ищется where dictGetString(id) != ''. В чем может быть проблема ?
-
Привет! После нескольких неудачных ddl операций, в некоторых партициях пропали колонки (как минимум из файлов columns.txt)
В логах страшные вещи
<Error> DB.TABLE: auto DB::StorageReplicatedMergeTree::processQueueEntry(ReplicatedMergeTreeQueue::SelectedEntryPtr)::(anonymous class)::operator()(DB::StorageReplicatedMergeTree::LogEntryPtr &) const: Code: 10, e.displayText() = DB::Exception: Not found column usage_type in block
Кто нибудь сталкивался? Как починить? Потому что сейчас даже дропнуть индекс не могу, пишет в зк мета данные не сходятся с локалкой -
Версия 21.1.2.15
-
Интересно, что если провернуть SYSTEM STOP MERGES, то проблема исчезает. Я залез в фс и глянул что не во всех партициях есть колонка. В кх клиенте метаданных, всё ровно на всех репликах
-
Сегодня при тестах выключил на горячую шард, запись в остальные шарды продолжилась, а вот при обращении к дистр таблицам появилась ошибка code 279. Db exception: all connection tries failed
Connection refused server1
Я как понял, читать клик через дистр таблицы не возможно при выпадение всего шарда. Кто нибудь сталкивался с подобным? -
да. нужна хотя бы одна живая реплика
либо кометировать шард в конфиге <remote_servers> -
ну после этого у вас база будет пухнуть и куча партов будет не эффективных
так что не стоит это делать без необходимости... -
Подскажите, можно ли сделать freez всей таблицы как один partition? чтобы не надо было каждый партитион отдельно делать ATTACH ?
-
Понимяу, поэтому включил обратно конечно же. Может optimize помочь в восстановлении партов?
-
FREEZE
это создание на диске hadlinks для того чтобы предотвартить удаление старых партов после MERGE
(парты удаляются из data но hardlink остается в shadow)
вы это делаете для бекапа? -
Мы сейчас хотим перенести данные с одного кликхаус сервера на новый более мощный
-
наскок большие таблицы то?
-
Есть по 2тб, есть по 20гб
В среднем по 10-20гб в сжатом виде -
-
Settings | ClickHouse Documentation
Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
спасибо!
-
UP
@den_crane , @dj_mixer , может у Вас в карманах случайно магическая парамка завалялась? -
а я правильно понимаю что freeze таблиц делается последовательно?
тоесть если у меня в базе для примера 30 таблиц, для каждой из них я делаю freeze и в итоге получаю на диске 30 чекпоинтов (по одному на каждую таблицу)
есть возможность сделать freeze всех таблиц в базе одновременно? -
>есть возможность сделать freeze всех таблиц в базе одновременно?
Нет, такой возможности нет (кроме остановки сервера) -
а как с остановкой?
в смысле снапшот файловой системы сделать или еще какой вариант? -
ребята, подскажите ламеру: у меня есть посчитанные гистограммы где идет group by по одному полю, а дальше эти данные используются в селекте где группируются еще по одному, более верхнеуровнему полю. как правильно тут склеить таплы массива и получить для верхнеуровнего поля всего одну строчку. какую функцию правильно для этого использовать, чтобы получился merge отрезков?
-
Спасибо!
-
https://unix.stackexchange.com/questions/202430/how-to-copy-a-directory-recursively-using-hardlinks-for-each-file
Можно просто наделать хардлинков, ровно как FREEZE работаетHow to copy a directory recursively using hardlinks for each fileI want to create a "copy" of a directory tree where each file is a hardlink to the original file Example: I have a directory structure: dirA/ dirA/file1 dirA/x/ dirA/x/file2 dirA/y/ dirA/y/file3 ...
-
Решил проблему. Оказалось, что была мутация вставшая намертво. Грохнул её и всё стало хорошо
-
Понятно, спасибо
-
хм, суть проблемы в чем? запрос выполнился вроде успешно - вы не хотите видеть ошибку на выполнении?
-
а что с ЗК? у вас случайно не обзервер используется?
-
да
ложных эксепшенов избежать -
у вас много ДДЛов создается/бегает?
-
Не знаю что под "обзервером" понимаете, опсы ответили не, нет обезрверов
у меня ЗК 5 нод на отдельных машинках
* сеть - Hetzner ( -
а можно с лидера зк echo mntr | nc localhost 2181
-
дропы партишек от промежуточного тира ... ~ 20-60 запросов в час
остальные ддл - стохастически и редко <1/час -
наверно просто баг в реализации (судя по коду)
https://github.com/ClickHouse/ClickHouse/issues/19027
у вас есть на инициаторе какие-либо ещё ошибки либо в ЗК логе?Error : Cannot provide query execution status · Issue #19027 · ClickHouse/ClickHouseDescribe the bug run sql : GRANT ON CLUSTER s6r2 ALL ON *.* TO admin WITH GRANT OPTION; sometimes ok and Sometimes an error occurs: 2021.01.14 12:23:07.457028 [ 56976 ] {e95938d6-21cd-42ea-af99-783...
-
Тебе прям все?
-
в личку пульнул чтоб чат не порочить
-
в зк эрроров не вижу (ток INFO/WARNING)
на ноде тоже ничего подозрительного в этот диапазон времени -
Уважаемые, может кто встречался с подобной задачей и подскажет.
Есть string, хочу получать map.
Проблема в том, что количество пар ключ : значение - плавающее. Нужно решение, чтобы под любое количество пар ключ : значение работало.
Т.е. как в запросе ниже, но с возможностью подставлять "все элементы массива", а не как в запросе ниже - явно указывать каждый элемент.
WITH
'key1:Value1,Key2:Value2'
as myString
SELECT
myString
,arrayFlatten(arrayMap( i -> splitByChar(':',i),splitByChar(',',myString))) myArray
,map(myArray[1],myArray[2],myArray[3],myArray[4]) myMap
FORMAT Vertical
myString: key1:Value1,Key2:Value2
myArray: ['key1','Value1','Key2','Value2']
myMap: {'key1':'Value1','Key2':'Value2'} -
такой инфолог есть?
An error occurred while creating auxiliary ZooKeeper directories in -
Подскажите, можно ли поменять хост host1.example (мускуля в этом случае) , если БД была создана следующим образом:
CREATE DATABASE test_db ON CLUSTER cluster_name ENGINE = MySQL('host1.example:3306', 'db', 'user', 'pass') -
базы только пересоздавать вроде
-
нет
-
ну тогда это баг и надо в коде сильно копать, скорее всего связано с переделкой database=replicated, судя по времени всех багов...
в гитхабе несколько тикетов, добавляйтесь в любой... -
-
Вопрос по оптимизации:
сильно ли на клик влияет case во вьюшке?
Если строк миллиарды -
-
там одно условие как ты указал в примере
-
спасибо )
-
Есть такой вопрос. Го генерирует запрос, выставляя такой prewhere PREWHERE Date >='2021-04-22' AND Date <= '2021-04-22' для HTTP
Эти даты генерируются из timestamp на хосте при помощи выражения time.Unix(from, 0).Format("2006-01-02"), то есть учитывается локальная тайм-зона. Тайм-зона в запросе не передаётся.
Мне кажется, что это способ, который может не работать, если зоны разные. Будет ли лучше и правильнее передавать PREWHERE Date >=toDate(fromTimestamp) AND Date <= toDate(untilTimestamp)? -
КХ читает все ветки всегда в ИФ-е, т.е. если будет вложенность или сложные подсчёты условия - это увеличивает тяжесть запроса пропорционально...
-
снапшот файловой системы вполне себе вариант
но для этого обычно надо /var/lib/clickhouse/ отдельным разделом монтировать -
Ну эт понятно
-
Привет, читал документацию, но все равно возникла не уверенность в познаниях)
Подскажите пожалуйста в некоторых вопросах:
1. Primary Index, удобная штука для выборки, этот индекс может содержать несколько полей, на сколько будет хардкорно, если у меня будет 5-6 полей, вставка происходит с частотой 3000 записей в сек . Не возникнут ли у меня проблемы?
2. Партиционирование думаю сделать под дням, норма ли это? В основном выборка идет по суточно, реже за несколько суток, совсем редко за месяц.Не будет ли большой проблемой?
Можно ли партиционирование сделать к примеру по несколько дней, к примеру 7....
Спасибо! -
1. В целом длинный pk - это плохо: он будет помещаться в оперативку.
2. Партиционирование по дням делают, однако надо тестировать на данных, если вы поместите дату в начало pk, ch использует его на запросе.
Также учитывайте, что партиционирование по дням это x30 файлов.
По поводу партиционирования по некоторому количеству дней (например по 7) - да, можно. Нужно добавить в partition by не date, а toStartOfWeek или нечто подобное. Однако я не уверен, что без указания аналогичной функции в запросе не будут прочтены лишние данные. -
Добрый день.
Как правильно настроить clickhouse-copier, если целевой кластер находится в Яндекс.Облаке (Managed Service) и требуется подключение по SSL?
Сейчас выдается ошибка Code: 210, e.displayText() = DB::NetException: SSL Exception: error:14000086:SSL routines::certificate verify failed (xxx.mdb.yandexcloud.net:9440) (version 20.5.3.27 (official build)) -
Спасибо! Буду тестировать
-
ах да, самое важное
вставка происходит с частотой 3000 записей в сек
не надо лить в ch данные по 1 строке, заливайте батчами
3000 записей в секунду по 1 строке - ужас
1 запись в секунду по 3000 строк - легко -
Ну да, читал об этом. Какой инструмент посоветуете, чтоб собирал эти батчи, перед вставкой?
-
мы используем kafka + заливка батчами по расписанию
есть готовые инструменты, заточенные под ch: https://clickhouse.tech/docs/ru/interfaces/third-party/proxy/Прокси-серверы от сторонних разработчиков | Документация ClickHouseПрокси-серверы от сторонних разработчиков chproxy chproxy - это http-прокси и балансировщик нагрузки для базы данных Cli
-
Завёл Issue, workaround описан там же.
https://github.com/ClickHouse/ClickHouse/issues/23515Expected ColumnLowCardinality, gotUInt8: While executing MergingSortedTransform · Issue #23515 · ClickHouse/ClickHouseDescribe the bug We encounter the following problem when performing some SELECT queries to a Distributed table with LowCardinality columns: DB::Exception: Expected ColumnLowCardinality, gotUInt8: W...
-
уххх. Спасибо!
-
Добрый вечер. А можно ли сделать вью, при запросе к которой(только чтение) в зависимости от значения Date запросы ходили в одну из двух таблиц? Или я хочу странного и не хер логику приложения пытаться впихнуть в бд? Кейс - по возможности без модификации приложения подсовывать ему таблицы с разными периодами агрегации данных и партиционирования.
-
В одной из таблиц будет будет ваша дата или в обоих может быть?
-
Таблица будет полностью одинаковая. Таймсириес: Path, Date, Value, Time, Timestamp. Просто данные в одной будут младше, а в другой старше месяца
-
Так вы по какой-то дате будете ходить в одну или другую таблицу? Есть ли случай, когда дата есть и в 1 и во 2 таблице?
-
Да, младше месяца в хот сет с сырыми данными, старше - в таблицу с аггрегированными данными
-
Мы это решаем через union all двухзапросов
-
Даты, конечно, будут отличаться
-
Хм. Надо подумать. То есть, если запрос прилетает, а такой даты нет, то есть шанс получить быстро пустой ответ вместо какого-нибудь условно фуллскана?
-
-
Можно через union двух таблиц сделать или через distributed таблицу, если на разных серваках лежит.
-
Спасибо большое!
-
Буду копать в сторону union. Супер)
-
Уточнение - дело не в DDL.
Была настроена гора таблиц с Kafka движком. Коллеги перевезли Кафку в другую подсеть, стал после этого пересоздавать их - не могу удалить: delete table запросы падают по таймауту. При этом они остаются висеть в system.processes (самый старший висит уже больше суток) и не реагируют на kill query (флаг is_cancelled появился ещё 6 часов назад, но запрос так и продолжает висеть).
Проверил - обычную таблицу с engine=Memory() я спокойно создал и удалил.
В чём может быть причина такой проблемы и как её побороть? -
Добрый вечер. Запрос возвращает тюплы - 1 строка - (1,10), вторая (n,m) ... (l.t). Каждый тюпл обозначает диапазон , хотелось бы пребразовать его в between. В итоге запрос (как я полагаю), должен выглядеть , как where (a between m and k) or (a between t and l) и т.д. можно ли средствами кликхауса преобразовать к таком виду? В документации функций относящиеся к тюплам не так уж и много, и они не подходят.
-
не до конца понял, что вы хотите, но пусть будет так:SELECT
(2, 8) AS t,
t.1 AS a,
t.2 AS b
FROM numbers(10)
WHERE (number > a) AND (number < b)
┌─t─────┬─a─┬─b─┐
│ (2,8) │ 2 │ 8 │
│ (2,8) │ 2 │ 8 │
│ (2,8) │ 2 │ 8 │
│ (2,8) │ 2 │ 8 │
│ (2,8) │ 2 │ 8 │
└───────┴───┴───┘ -
Скажите пожалуйста, где можно найти pipeline сборок Clickouse для builds.clockhouse.tech ( clickhouse-builds.s3.yandex.net? )
Меня в частности интересуют нестандартные билды https://clickhouse.tech/docs/en/getting-started/install/#from-binaries-non-linux
Очень хочется найти с какими ключами запускаются сборки как для MacOS так и FreeBSD.
( на лог сборки FreeBSD, например, ссылается Алексей Миловидов здесь: https://github.com/ClickHouse/ClickHouse/pull/18924 но для паблика что-то ресурс не отдает нужной инфы или уже отротировался ) -
arrayExists(x -> you_column between x.1 and x.2, groupArray(tuples_column))
-
так они же в основное репе, в make файлах?
или просто из любого свежего PR ClickHouse build check — 16/16 builds are OK -> detailes
https://clickhouse-builds.s3.yandex.net/23517/d78da1fa7765881b4362564cd6efa7fb1f5489c6/clickhouse_build_check/report.html -
Я не уверен, что Яндексовый кластер собирает билд на FreeBSD через эту последовательность:
git submodule update --init --recursive
cmake .
тк в такой конструкции ошибки связанные с местонахождением llvm.
Вот хочется выяснить, то ли EMBEDDED LLVM то ли -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ и тд.
Мне пару патчей надо протестировать именно под FreeBSD, собрав пару разных версий. -
что-то по ссылке нету clang-11-freebsd, видимо тоже перестал собираться 😉
-
-
хм, он в докере а не нативной среде билдится?) хорошо, сейчас проверю,спасибо
-
да, пока что только кросс-компиляция
-
благодарю.
-
доброй ночи
подскажите пожалуйста, можно ли в MV с типом SummingMergeTree в качестве суммируемой колонки использовать argMin?
пока все эксперементы не дают ожидаемых результатов ( -
можно не мучить себя флагами, а найти packager в репозитории и собрать как-то так ./packager --compiler=clang-11-freebsd --docker-image-version=latest --package-type=binary --output-dir=/home/jakalletti/ClickHouse/build/freebsd/ --clickhouse-repo-path=/home/jakalletti/ClickHouse/ClickHouse --cache=ccache --ccache_dir=/home/jakalletti/docker_ccache
-
вероятно да, тут есть проблема, что у меня нет такой же хорошо настроенной инфры с волюмами/ccache и докерами, но есть FreeBSD.
Во фре есть порт Clickhouse, который содержит патчи решающую очень серъезную проблему на FreeBSD, но эти патчи отсутствуют в апстриме. Порт безбожно устарел и заказчики (западная компания и bigdata, которая по каким-то причинам использует FreeBSD и Clickhouse ) хотели бы иметь свежую версию. -
можно попробовать такое
cmake -DLINKER_NAME=lld -DCMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache -DCMAKE_C_COMPILER=`which clang` -DCMAKE_CXX_COMPILER=`which clang++` -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_TESTS=0 -DENABLE_UTILS=0 -DPARALLEL_LINK_JOBS=16 -DPARALLEL_COMPILE_JOBS=64 -G Ninja ../../ClickHouse/ -
это я видел, тут проблемы не существует потому что собирается в линукс окружении но с freebsd_build тулчейном. Я уже нашел проблемное место:
CmakeLists.txt: find_program (LLVM_AR_PATH NAMES "llvm-ar" "llvm-ar-11" "llvm-ar-10" "llvm-ar-9" "llvm-ar-8",
тогда как llvm11, lllvm12 и тд инсталлируют бинари вида llvm-ar11, llvm-ar12 _во FreeBSD_
Незнаю как а апстриме llvm и MacOS.
Спасибо за ссылку на лог, многое стало понятно и полезно в целом. -
Ждем PR)
-
+. Было бы круто конечно этот PR оживить: https://github.com/ClickHouse/ClickHouse/pull/13869
из-за него весь сыр-бор. -
выбор FreeBSD меня не касается, но Clickhouse похоже стал очень популярен за пределами России, успех)
-
SimpleAggregateFunction или AggregateFunction ?
например https://github.com/ClickHouse/ClickHouse/issues/23356#issuecomment-824907780
версия КХ ? -
попробую подробнее объяснить….версия 21.4.3.21
есть таблица в которой 3 основных поля - event, value, created_at
задача посчитать sum(value) да не всех, а только первых для каждого event
потому и решил использовать argMin, но кроме как запрос их MV обернуть снова запросом для суммы я не нашел других вариантов ( -
это невозможно
-
в итоге пришел к варианту MV AggregatingMergeTree c argMinState(value, created_at) и group by event с последуюшим запросом SELECT sum(value) FROM select (argMinMerge(…) as value)
на стестовых данных в 1лярд записей - скорость приемлимая вроде получилась -
да, только так.
-
спасибо за ответ…не буду копать туда куда не получится )
-
-
-
YYYYMM это 12
-
-
-
-
-
все зависит от запросов. Иногда 365 иногда 12 хорошо.
-
от выборки зависит….если выборка будет за год - 365 партиций…а за неделю - всего 7…..
-
у меня выборка в 90% случаев за неделю….причем с ПН по ВС - так и делал партицию PARTITION BY toStartOfWeek(ep_dt, 1)
-
UP. =)
А возможно ли превратить string с произвольным количеством пар ключ:значение в map? -
-
-
-
все от выборки зависит…если брать за год такие выборки то будет «тормозить» (но опять же относительно….на днях генерировал себе очень похожие по описанию данные по 2,5М в сутки за полтора года) партицирование по неделям…запрос на выборку с двойной вложенностью и группировкой за все время - порядка 3с, а по неделям - 30-40мс….на диске это все заняло 90+ GB
-
-
-
никто опять же для частых выборок из разряда - уники по дням - не помешает вам сделать MV агрегированные….а для детального вывода уже использовать raw данные
-
брр, на входе строка 'key1:Value1,Key2:Value2'
а что на выходе надо ? -
никто = кликхаус, опечатка?
-
вам 100% надо месячные партиции
-
такие и есть сейчас
-
вы не знаете как массив запихать в map ?
-
Хочу получить map {'key1':'Value1','Key2':'Value2'}, но в моем случае string может быть разной длинны. т.е. нужно решение, которое бы работало и для 'key1:Value1,Key2:Value2,Key5:Value5'
Да, не получается массив в map запихать. Очень старался, но никак =\ -
та нет ) в этом и прелесть клика - что можно с помощью MV агрегировать данные на лету…тем самым заранее избавлять как от объемов данных, так и от сложных расчетов агрегаций
-
-
WITH 'key1:Value1,Key2:Value2,Key5:Value5' as myString
SELECT
arrayMap( i -> ((splitByChar(':',i) as z) [1], z[2]) ,splitByChar(',',myString)) myArray,
cast ( (myArray.1, myArray.2) as Map(String,String)) mp -
Гигантское спасибо за ответ и за то, что Вы тут каждый день пишите. =)
- 23 April 2021 (192 messages)
-
Мы используем graphite-clickhouse, там модно читать из разных таблиц, в зависимости от давности данных в запросе, но запрос - как к графиту
-
-
Привет, есть кластер из 3х реплик. Возможно ли его пересобрать в кластер из 2х шардов и 2х реплик как на картинке. Если просто конфигурацию поменять поможет?
-
никто не сталкивался что ли с таким?)
-
вообще, надо понять что индексы в clickhouse
это не B-Tree индексы как в остальных СУБД, когда мы методом половинного поиска по значению из индекса за o(log n) быстро находим где у нас в основном файле смещения по которому лежат данные с требуемым значением индекса
в ClickHouse индексы это data skip индексы
для PK это фактически min max индекс
то есть мы читаем небольшой .mrk файл с кешированием в памяти ..
видим в нем значения min \ max значения pk полей, для нескольких (по умолчанию 8192) строк в таблице
и смещения в .bin файлах (начало compressed блока + смещение внутри uncompressed блока)
и на этом основании принимаем решение как именно вычитывать этот .bin файл
Партицирование по дням нужно только когда данных (размер .bin файлов) РЕАЛЬНО ОЧЕНЬ МНОГО... (размеры старых смерженых партов начинаются от нескольких сотен мегабайт)
Партицирование это физическое разбиение на разные каталоги и оно позволяет очень быстро сразу определиться за какой период мы читаем, выборка из партиций идет паралельно, но для HDD много партиций в таком случае будет вредно, для SSD норм
Партицирование по дням может мешать если вы всталяете данные в одном INSERT за большой промежуток времени и затрагиваете сразу несколько партиций, в которых будет создаваться куча мелких партов (system.parts) которые потом надо в бекграунде мержить с более старыми крупными партами
> Вставка 3000 записей в секунду.
в смысле 3000 INSERT по одной записи в секунду?
НЕ ДЕЛАЙТЕ ТАК!
или 3000 INSERT по 1 000 записей в секунду?
так можно, лучше пусть будет 30 INSERT по 100 000 записей, или один INSERT в секунду на 3 000 000 записей -
второе поле лучше в одинарные кавычки взять
Template
https://clickhouse.tech/docs/en/interfaces/formats/#format-template
JSON храните как строку
получается что то типа
CREATE TABLE t (id UInt64, json String) ENGINE=MergeTree();
echo ''${id:CSV}, ${json:JSON}" >/var/lib/clickhouse/user_files/row.format
cat file | curl -XPOST --data-binary=@- "http://127.0.0.1:8123/?query=INSERT INTO table(id, json) FORMAT Template SETTINGS format_template_row = '/var/lib/clickhouse/user_files/row.format'"Input and Output Formats | ClickHouse DocumentationFormats for Input and Output Data ClickHouse can accept and return data in various formats. A format supported for input
-
а словари на удаленных нодах есть?
SELECT hostName(), memory_usage, query_id, exception FROM cluster('your_cluster',system.query_log) WHERE type NOT IN ('QueryFinish','QueryStart') AND query LIKE '% dictGetString(id) != %';
и потом
SELECT hostName(), * FROM cluster('your_cluster',system.query_log) WHERE initial_query_id='ваш_упавший_query_id' -
Спасибо за развернутый ответ и совет.
Вопрос такой, стоит ли в индексе хранить UUID? Как он тогда вычислит min max? Или будет сортировать в алфавитном порядке? -
перебалансировки данных в clickhouse нет
если вы про это
ну и реплики в ZK по новой надо регистрировать c другими именами
3 реплики у вас на скольки физических машинах?
на 3х
хотите 4 сервера? или сколько? -
Привет. Можно ли как-то научить кликхаус самостоятельно делать HTTP запрос на внешний сервис, после срабатывания условного триггера в Live Views?
-
нет не стоит
вообще в PK индексе не стоит хранить поля с высокой кардинальностью (больше сотен тысяч) значений
UUID вообще вредная штука, потому что значение рандомное и монотонно не возрастает
соответсвенно размазывается по всем партам
и трудно парты отбрасывать потому что не ясно есть ваш UUID в них или нет
лучше замените на snowflake id какой нибудь который возрастает монотонно
он похож на время и его кстати уже можно в PK хранить -
нет =)
откуда триггеры в LIVE VIEWS?
можно какой нибудь
CREATE MATERIALIZED VIEW mv_to_url TO table_name
AS
SELECT ...
FROM another_table
WHERE value > 10
и у этого table_name, ENGINE=URL(...)
тогда может быть будет POST запрос с значениями которые вы вставляете
но надо экспериментировать -
Интересная идея.
-
MATERIALIZED VIEW работает не со всей another_table
а только с блоком данных прилетевшим из INSERT -
Это я понимаю.
-
Словари есть. Буду пробовать, спасибо. На что ориентироваться в результате?
-
а что такое snowflake id? Гугл говорит только что snowflake база данных
-
вот так гуглите =)
snowflake да =) такая база есть
twitter snowflakeid
sonyflake id -
Ваш гугл вам врет
https://medium.com/nuances-of-programming/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-snowflake-id-968dd6d21ca8Что такое Snowflake ID?Как обеспечить сохранность больших объемов данных? Три метода помогут вам в этом разобраться.
-
-
ну вы смотрите какой именно запрос генерирует на удаленных нодах ваш distributed запрос
может быть там не передается dictGet условие... и вы там пытаетесь как то не потоково буферизировать результат
вообще конечно запрос и структуры таблиц словарей нужны ...
по памяти не обязательно именно ваш запрос отваливается, может быть там что-то другое отжирает -
да на 3х, хочу еще одну взять машину. 2 шарда и к ним по реплике
-
Подскажите, пожалуйста, Engine=Kafka — это только для консьюмера? Продьюсить в Кафку КХ не умеет?
-
ну тогда в целом не очень сложно должно быть. хотя надо смотреть какие косяки всплывут с Atomic и папкой /var/lib/clickhouse/store
убираете replica-3 из <remote_servers> на replica-1 и replica-2
должно подхватиться без рестарта
ну и на уровне chproxy \ приложения \ kubernetes sevices если есть ее выключаете
стопаете replica-3
чистите в ней /var/lib/clickhouse/data/db/ваши_replicated_merge_tree_Таблицы/
надеюсь вы использовали макросы при создании ReplicatedMergeTree таблиц =)
меняете <shard>2</shard> <replica>replica-3</replica> в <macros>
ставите новый сервер replica-4
стопаете clickhouse-server на replica-4
меняете <shard>2</shard> <replica>replica-4</replica> в <macros>
переносите /var/lib/clickhouse/metadata с replica-3 на replica-4
меняете на replica-3 и replica-4 <remote_servers> на двухшардовую конфигурацию
стартуете replica-4 и replica-4
проверяете что таблицы есть. но данных нет
меняете на replica-1 и replica-2 <remote_servers> на двухшардовую конфигурацию
подхватить должно без рестарта
после этого проверяем что данные из Distributed таблиц выбираются нормально
для ребалансировки данных
можно сделать
на replica-3
INSERT INTO table SELECT * FROM remote('replica-1', db, table) WHERE <sharding_expression>=XXX
и на replica-1
ALTER TABLE table DELETE WHERE <sharding_expression>=XXX
и молиться что все нормально отреплицируется
пользуясь случаем прорекламирую что если у вас kubernetes умеет horizontal autoscaling
и вы используете clickhouse-operator
может провернуть вам подобное (но без перебалансировки данных)
там просто в yaml манифесте меняется
spec:
clusters:
- name: cluster_name
layout:
shardCount: 1
replicasCount: 3
на
layout:
shardCount: 2
replicasCount: 2
;) -
умеет, https://altinity.com/blog/2020/5/21/clickhouse-kafka-engine-tutorial
через INSERTClickHouse Kafka Engine TutorialOur colleague Mikhail Filimonov just published an excellent ClickHouse Kafka Engine FAQ. It provides users with answers to common questions about using stable versions, configuration parameters, standard SQL definitions, and many other topics. Even experienced users are likely to learn something new. But what if you are getting started and need help setting up Kafka and ClickHouse for the first time? Good news! This article is for you.
-
Спасибо. Прекрасно.
-
спасибо за крутой ответ!
-
День добрый.
Не подскажете куда копать? переехал кластер с 20.9.2.20 на 21.3.6.55 с заменой конфигов.
сейчас в лог валяться ошибки при достаточно легковесных запросах такого рода: -
2021.04.23 08:46:08.171993 [ 2114 ] {cb4541fc-bac8-41ea-87cc-3665791c09ca} <Error>
executeQuery: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe, while writing to socket (192.168.0.171:49796) (version 21.3.6.55 (official build)) (from 192.168.0.171:49796)
(in query: SELECT count() FROM DATABASE.TABLE), Stack trace (when copying this message, always include the lines below):
0. DB::WriteBufferFromPocoSocket::nextImpl() @ 0xeb675e2 in /usr/bin/clickhouse
1. DB::TCPHandler::sendProgress() @ 0xf8d1d80 in /usr/bin/clickhouse
2. DB::TCPHandler::processOrdinaryQueryWithProcessors() @ 0xf8cd930 in /usr/bin/clickhouse
3. DB::TCPHandler::runImpl() @ 0xf8c6d05 in /usr/bin/clickhouse
4. DB::TCPHandler::run() @ 0xf8d8159 in /usr/bin/clickhouse
5. Poco::Net::TCPServerConnection::start() @ 0x11f8c91f in /usr/bin/clickhouse
6. Poco::Net::TCPServerDispatcher::run() @ 0x11f8e331 in /usr/bin/clickhouse
7. Poco::PooledThread::run() @ 0x120c4a59 in /usr/bin/clickhouse
8. Poco::ThreadImpl::runnableEntry(void*) @ 0x120c08ba in /usr/bin/clickhouse
9. start_thread @ 0x76db in /lib/x86_64-linux-gnu/libpthread-2.27.so
10. clone @ 0x12171f in /lib/x86_64-linux-gnu/libc-2.27.so
2021.04.23 08:46:08.172078 [ 2114 ] {cb4541fc-bac8-41ea-87cc-3665791c09ca} <Error> TCPHandler: Code: 210, e.displayText() = DB::Exception: I/O error: Broken pipe, while writing to socket (192.168.0.171:49796), Stack trace:
0. DB::WriteBufferFromPocoSocket::nextImpl() @ 0xeb675e2 in /usr/bin/clickhouse
1. DB::TCPHandler::sendProgress() @ 0xf8d1d80 in /usr/bin/clickhouse
2. DB::TCPHandler::processOrdinaryQueryWithProcessors() @ 0xf8cd930 in /usr/bin/clickhouse
3. DB::TCPHandler::runImpl() @ 0xf8c6d05 in /usr/bin/clickhouse
4. DB::TCPHandler::run() @ 0xf8d8159 in /usr/bin/clickhouse
5. Poco::Net::TCPServerConnection::start() @ 0x11f8c91f in /usr/bin/clickhouse
6. Poco::Net::TCPServerDispatcher::run() @ 0x11f8e331 in /usr/bin/clickhouse
7. Poco::PooledThread::run() @ 0x120c4a59 in /usr/bin/clickhouse
8. Poco::ThreadImpl::runnableEntry(void*) @ 0x120c08ba in /usr/bin/clickhouse
9. start_thread @ 0x76db in /lib/x86_64-linux-gnu/libpthread-2.27.so
10. clone @ 0x12171f in /lib/x86_64-linux-gnu/libc-2.27.so
2021.04.23 08:46:08.172229 [ 2114 ] {cb4541fc-bac8-41ea-87cc-3665791c09ca} <Warning> TCPHandler: Client has gone away. -
192.168.0.171
это адрес клиента или сервера? -
Joined.
-
-
сервера. Все ИП которые фигурируют в ошибках - серверов.
-
табличка distributed
-
2 шарда 2 реплики. Вылазит на всех без видимой закономерности
-
так, а эта ошибка на ноде инициаторе запроса?
или на ноде с которой данные в distributed пытаются прочитаться?
SELECT hostName(), * FROM clusterAllReplicas('your_cluster',system.settings) WHERE changed
покажите ?
или тоже не работает?
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-max_replica_delay_for_distributed_queries
вот это значение одинаковое у всех?
и вот это
https://clickhouse.tech/docs/en/operations/settings/settings/#connect-timeout-with-failover-msSettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
насчет инициатора - надо ловить проверять. Займусь сейчас. У меня клиент с кластером работает random.
-
Query id: 464778a6-32c8-4482-a858-b69a24d852b8
┌─hostName()─┬─name─────────────────────────────┬─value───────┬─changed─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─min──┬─max──┬─readonly─┬─type───────────────────┐
│ c1-s1-r1 │ max_query_size │ 1000000000 │ 1 │ Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s1-r1 │ connect_timeout_with_failover_ms │ 2000 │ 1 │ Connection timeout for selecting first healthy replica. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Milliseconds │
│ c1-s1-r1 │ queue_max_wait_ms │ 0 │ 1 │ The wait time in the request queue, if the number of concurrent requests exceeds the maximum. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Milliseconds │
│ c1-s1-r1 │ load_balancing │ random │ 1 │ Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ LoadBalancing │
│ c1-s1-r1 │ log_queries │ 0 │ 1 │ Log requests and write the log to the system table. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s1-r1 │ distributed_product_mode │ local │ 1 │ How are distributed subqueries performed inside IN or JOIN sections? │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ DistributedProductMode │
│ c1-s1-r1 │ joined_subquery_requires_alias │ 0 │ 1 │ Force joined subqueries and table functions to have aliases for correct name qualification. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s1-r1 │ max_memory_usage │ 10000000000 │ 1 │ Maximum memory usage for processing of single query. Zero means unlimited. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s1-r1 │ log_query_threads │ 0 │ 1 │ Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
└────────────┴──────────────────────────────────┴─────────────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────┴──────┴──────────┴────────────────────────┘
┌─hostName()─┬─name─────────────────────────────┬─value───────┬─changed─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─min──┬─max──┬─readonly─┬─type───────────────────┐
│ c1-s1-r2 │ max_query_size │ 1000000000 │ 1 │ Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s1-r2 │ connect_timeout_with_failover_ms │ 2000 │ 1 │ Connection timeout for selecting first healthy replica. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Milliseconds │
│ c1-s1-r2 │ load_balancing │ random │ 1 │ Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ LoadBalancing │
│ c1-s1-r2 │ log_queries │ 0 │ 1 │ Log requests and write the log to the system table. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │ -
│ c1-s1-r2 │ distributed_product_mode │ local │ 1 │ How are distributed subqueries performed inside IN or JOIN sections? │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ DistributedProductMode │
│ c1-s1-r2 │ joined_subquery_requires_alias │ 0 │ 1 │ Force joined subqueries and table functions to have aliases for correct name qualification. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s1-r2 │ max_memory_usage │ 10000000000 │ 1 │ Maximum memory usage for processing of single query. Zero means unlimited. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s1-r2 │ log_query_threads │ 0 │ 1 │ Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s1-r2 │ normalize_function_names │ 0 │ 1 │ Normalize function names to their canonical names │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
└────────────┴──────────────────────────────────┴─────────────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────┴──────┴──────────┴────────────────────────┘
┌─hostName()─┬─name─────────────────────────────┬─value───────┬─changed─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─min──┬─max──┬─readonly─┬─type───────────────────┐
│ c1-s2-r2 │ max_query_size │ 1000000000 │ 1 │ Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s2-r2 │ connect_timeout_with_failover_ms │ 2000 │ 1 │ Connection timeout for selecting first healthy replica. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Milliseconds │
│ c1-s2-r2 │ load_balancing │ random │ 1 │ Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ LoadBalancing │
│ c1-s2-r2 │ log_queries │ 0 │ 1 │ Log requests and write the log to the system table. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s2-r2 │ distributed_product_mode │ local │ 1 │ How are distributed subqueries performed inside IN or JOIN sections? │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ DistributedProductMode │
│ c1-s2-r2 │ joined_subquery_requires_alias │ 0 │ 1 │ Force joined subqueries and table functions to have aliases for correct name qualification. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s2-r2 │ max_memory_usage │ 10000000000 │ 1 │ Maximum memory usage for processing of single query. Zero means unlimited. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s2-r2 │ log_query_threads │ 0 │ 1 │ Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s2-r2 │ normalize_function_names │ 0 │ 1 │ Normalize function names to their canonical names │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │ -
└────────────┴──────────────────────────────────┴─────────────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────┴──────┴──────────┴────────────────────────┘
┌─hostName()─┬─name─────────────────────────────┬─value───────┬─changed─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─min──┬─max──┬─readonly─┬─type───────────────────┐
│ c1-s2-r1 │ max_query_size │ 1000000000 │ 1 │ Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s2-r1 │ connect_timeout_with_failover_ms │ 2000 │ 1 │ Connection timeout for selecting first healthy replica. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Milliseconds │
│ c1-s2-r1 │ load_balancing │ random │ 1 │ Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ LoadBalancing │
│ c1-s2-r1 │ log_queries │ 0 │ 1 │ Log requests and write the log to the system table. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s2-r1 │ distributed_product_mode │ local │ 1 │ How are distributed subqueries performed inside IN or JOIN sections? │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ DistributedProductMode │
│ c1-s2-r1 │ joined_subquery_requires_alias │ 0 │ 1 │ Force joined subqueries and table functions to have aliases for correct name qualification. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s2-r1 │ max_memory_usage │ 10000000000 │ 1 │ Maximum memory usage for processing of single query. Zero means unlimited. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ c1-s2-r1 │ log_query_threads │ 0 │ 1 │ Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ c1-s2-r1 │ normalize_function_names │ 0 │ 1 │ Normalize function names to their canonical names │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
└────────────┴──────────────────────────────────┴─────────────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────┴──────┴──────────┴────────────────────────┘ -
так. Наверно как-то отформатировать надо?
-
или норм?
-
format Vertical
-
Query id: 8a995e1e-0352-4511-bc74-fd2b0cd4c235
Row 1:
──────
hostName(): c1-s1-r1
name: max_query_size
value: 1000000000
changed: 1
description: Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later)
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64
Row 2:
──────
hostName(): c1-s1-r1
name: connect_timeout_with_failover_ms
value: 2000
changed: 1
description: Connection timeout for selecting first healthy replica.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Milliseconds
Row 3:
──────
hostName(): c1-s1-r1
name: queue_max_wait_ms
value: 0
changed: 1
description: The wait time in the request queue, if the number of concurrent requests exceeds the maximum.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Milliseconds
Row 4:
──────
hostName(): c1-s1-r1
name: load_balancing
value: random
changed: 1
description: Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: LoadBalancing
Row 5:
──────
hostName(): c1-s1-r1
name: log_queries
value: 0
changed: 1
description: Log requests and write the log to the system table.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 6:
──────
hostName(): c1-s1-r1
name: distributed_product_mode
value: local
changed: 1
description: How are distributed subqueries performed inside IN or JOIN sections?
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: DistributedProductMode
Row 7:
──────
hostName(): c1-s1-r1
name: joined_subquery_requires_alias
value: 0
changed: 1
description: Force joined subqueries and table functions to have aliases for correct name qualification.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 8:
──────
hostName(): c1-s1-r1
name: max_memory_usage
value: 10000000000
changed: 1
description: Maximum memory usage for processing of single query. Zero means unlimited.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64
Row 9:
───────
hostName(): c1-s1-r1
name: log_query_threads
value: 0
changed: 1
description: Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 10:
───────
hostName(): c1-s1-r2
name: max_query_size
value: 1000000000
changed: 1
description: Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later)
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64
Row 11:
───────
hostName(): c1-s1-r2
name: connect_timeout_with_failover_ms
value: 2000
changed: 1
description: Connection timeout for selecting first healthy replica.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Milliseconds
Row 12:
───────
hostName(): c1-s1-r2
name: load_balancing
value: random
changed: 1
description: Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: LoadBalancing
Row 13:
───────
hostName(): c1-s1-r2
name: log_queries
value: 0
changed: 1
description: Log requests and write the log to the system table.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 14:
───────
hostName(): c1-s1-r2
name: distributed_product_mode
value: local
changed: 1
description: How are distributed subqueries performed inside IN or JOIN sections?
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: DistributedProductMode -
Row 15:
───────
hostName(): c1-s1-r2
name: joined_subquery_requires_alias
value: 0
changed: 1
description: Force joined subqueries and table functions to have aliases for correct name qualification.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 16:
───────
hostName(): c1-s1-r2
name: max_memory_usage
value: 10000000000
changed: 1
description: Maximum memory usage for processing of single query. Zero means unlimited.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64
Row 17:
───────
hostName(): c1-s1-r2
name: log_query_threads
value: 0
changed: 1
description: Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 18:
───────
hostName(): c1-s1-r2
name: normalize_function_names
value: 0
changed: 1
description: Normalize function names to their canonical names
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 19:
───────
hostName(): c1-s2-r2
name: max_query_size
value: 1000000000
changed: 1
description: Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later)
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64
Row 20:
───────
hostName(): c1-s2-r2
name: connect_timeout_with_failover_ms
value: 2000
changed: 1
description: Connection timeout for selecting first healthy replica.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Milliseconds
Row 21:
───────
hostName(): c1-s2-r2
name: load_balancing
value: random
changed: 1
description: Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: LoadBalancing
Row 22:
───────
hostName(): c1-s2-r2
name: log_queries
value: 0
changed: 1
description: Log requests and write the log to the system table.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 23:
───────
hostName(): c1-s2-r2
name: distributed_product_mode
value: local
changed: 1
description: How are distributed subqueries performed inside IN or JOIN sections?
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: DistributedProductMode
Row 24:
───────
hostName(): c1-s2-r2
name: joined_subquery_requires_alias
value: 0
changed: 1
description: Force joined subqueries and table functions to have aliases for correct name qualification.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 25:
───────
hostName(): c1-s2-r2
name: max_memory_usage
value: 10000000000
changed: 1
description: Maximum memory usage for processing of single query. Zero means unlimited.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64
Row 26:
───────
hostName(): c1-s2-r2
name: log_query_threads
value: 0
changed: 1
description: Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 27:
───────
hostName(): c1-s2-r2
name: normalize_function_names
value: 0
changed: 1
description: Normalize function names to their canonical names
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 28:
───────
hostName(): c1-s2-r1
name: max_query_size
value: 1000000000
changed: 1
description: Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later)
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64 -
Row 29:
───────
hostName(): c1-s2-r1
name: connect_timeout_with_failover_ms
value: 2000
changed: 1
description: Connection timeout for selecting first healthy replica.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Milliseconds
Row 30:
───────
hostName(): c1-s2-r1
name: load_balancing
value: random
changed: 1
description: Which replicas (among healthy replicas) to preferably send a query to (on the first attempt) for distributed processing.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: LoadBalancing
Row 31:
───────
hostName(): c1-s2-r1
name: log_queries
value: 0
changed: 1
description: Log requests and write the log to the system table.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 32:
───────
hostName(): c1-s2-r1
name: distributed_product_mode
value: local
changed: 1
description: How are distributed subqueries performed inside IN or JOIN sections?
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: DistributedProductMode
Row 33:
───────
hostName(): c1-s2-r1
name: joined_subquery_requires_alias
value: 0
changed: 1
description: Force joined subqueries and table functions to have aliases for correct name qualification.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 34:
───────
hostName(): c1-s2-r1
name: max_memory_usage
value: 10000000000
changed: 1
description: Maximum memory usage for processing of single query. Zero means unlimited.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: UInt64
Row 35:
───────
hostName(): c1-s2-r1
name: log_query_threads
value: 0
changed: 1
description: Log query threads into system.query_thread_log table. This setting have effect only when 'log_queries' is true.
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
Row 36:
───────
hostName(): c1-s2-r1
name: normalize_function_names
value: 0
changed: 1
description: Normalize function names to their canonical names
min: ᴺᵁᴸᴸ
max: ᴺᵁᴸᴸ
readonly: 0
type: Bool
36 rows in set. Elapsed: 0.022 sec. Processed 1.56 thousand rows, 294.36 KB (69.38 thousand rows/s., 13.13 MB/s.) -
ну только один таймаут меньше сделали
ошибка непонятна в том в каком именно сокет и кто не может записать
конфиги сети не менялись ? -
нет. сеть не менялась, ipv6 выключен
-
max_replica_delay_for_distributed_queries не знаю, не трогал настройку. Как ее найти?
-
всем привет!
поделитесь опытом, пожалуйста - если у вас есть таблица с сырым логом событий, и вам нужен агрегат над ней, как кошерней поступить: matview или агрегировать по крону руками
или как-то ещё?
важны надёжность (в первую очередь составления агрегата; если же в него иногда не доедет капелюшечка данных, то это терпимо)
простота добавления новых столбцов
возможность иногда переагрегировать данные (matview же не запрещает это сделать, кажется?)
на самом деле, не очень хорошо представляю свои конкретные вопросы - хотелось бы просто узнать неочевидные плюсы-минусы-подводные камни подходов
пока что я знаю только, что matview это по сути таблица + триггер на инсерт в основную таблицу
ну и могу себе представить, как может фейлиться кронджоба) -
Если поможет, могу смоделировать ситуацию когда клиент будет слать запросы на один инстанс.
-
ну не трогайте пока, нет смысла
тут просто надо понять где ошибка возникает
в какой именно сокет не может записать clickhouse
вариантов несколько
исходящая запись в клиентский сокет для записи ответа вашему клиенту
исходящая запись на узле инициаторе запроса в сокет идущий к другим узлам
исходящая запись на узле обработчике запроса в сокет идущий к узлу инициатору
Distributed таблица поверх каких таблиц сделана?
<remote_servers>
проверьте на всех серверах
вдруг там порты не те, или хосты -
ну у вас SELECT * FROM clusterAllReplicas без ошибок прошел, возможно проблем нет
-
еще можно попробовать SYSTEM DROP DNS CACHE на всех узлах выполнить
-
хм...
ни NS ни hostname не менялось. Ни ИПы. Конфигурация кластера переехала в конфиг с предыдущих версий где проблем небыло.
Конфиги проверю сейчас еще раз и резетну кеш. Но ошибка возникает на всех машинах и не всегда. В общем попробую сейчас собрать больше статистики - отпишусь.
Еще момент - все 4 машинки на proxmox крутятся, т.е. вритуалки. Апдейта убунты не проводит перед поднятием версии клика. -
Спасибо
-
ну как вариант смотреть в сторону proxmox может быть он дропает коннекты
смотреть IPTABLES
поснифать трафик посмотреть на какие нибудь неожиданные TCP RST -
сейчас соберу статистику по дропам. но опять же, даже перезагрузок небыло при поднятии версии клика.
-
ну тогда надо определиться все таки
между чем и чем ошибка возникает
https://t.me/clickhouse_ru/215345Slach [altinity] in ClickHouse не тормозитну не трогайте пока, нет смысла тут просто надо понять где ошибка возникает в какой именно сокет не может записать clickhouse вариантов несколько исходящая запись в клиентский сокет для записи ответа вашему клиенту исходящая запись на узле инициаторе запроса в сокет идущий к другим узлам исходящая запись на узле обработчике запроса в сокет идущий к узлу инициатору Distributed таблица поверх каких таблиц сделана? <remote_servers> проверьте на всех серверах вдруг там порты не те, или хосты
-
<Error> TCPHandler: Code: 210, e.displayText() = DB::Exception: I/O error: Broken pipe, while writing to socket (192.168.0.172:48668)
всегда ошибка с ИП адресом, кто инициатор запроса. С ип адресом хоста, куда коннектится клиент. -
iptables чист. Ни коннтрека ни инпута ни NAT правил нет.
-
сетевой интерфейс общий, прокс virtio, ресурсы одинаковы. uptime прокса не более 25%
-
остальное в идле
-
=/
-
если попробовать debag пакеты поставить - как это дело попробовать прострейсить? или нет смысла дергаться?
-
debug*
-
nft правил нет?
Телнет на порт проходит?
tcpdump ом трафик смотрел? -
nft - нета
Телнет на порт проходит? - да. И запросы в 80% времени без сбоев. Данные собираются и дистрьютятся.
tcpdump ом трафик смотрел? - нет. если подскажете команды моду снять -
UPD - даже при ошибке данные корректны.... Хм...
-
я не знаю, может и можно закрыть глаза на лог и вылить в прод это дело, но что-то немного страшновато
-
Добрый день. Подскажите, пожалуйста, по оптимальному написанию запроса для следующей задачи. Есть кластер из 10 узлов. На нем нужно посчитать одним запросом 1) Количество уникальных отправок, кликов и открытий сообщений. 2) Общее количество отправок, кликов и открытий сообщений. 3) Количество уникальных получателей сообщений. Ключ шардирования выбран как Hash(Identity) (идентификатор получателя). Делаю вот такой запрос: SELECT
Date,
SUM(SentCountTmp) AS AllSent,
SUM(OpenedCountTmp) AS AllOpened,
SUM(ClickedCountTmp) AS AllClicked,
SUM(UniqueSentCountTmp) AS UniqueSent,
SUM(UniqueOpenedCountTmp) AS UniqueOpened,
SUM(UniqueClickedCountTmp) AS UniqueClicked
FROM(
SELECT
Sent AS Date,
SUM(SentCount) AS SentCountTmp,
SUM(OpenedCount) AS OpenedCountTmp,
SUM(ClickedCount) AS ClickedCountTmp,
1 AS UniqueSentCountTmp,
SUM(UniqueOpenedCount) AS UniqueOpenedCountTmp,
SUM(UniqueClickedCount) AS UniqueClickedCountTmp
FROM(
SELECT
Sent AS Sent,
Identity AS Identity,
SUM(SentCount) AS SentCount,
SUM(OpenedCount) AS OpenedCount,
SUM(ClickedCount) AS ClickedCount,
OpenedCount > 0 AS UniqueOpenedCount,
ClickedCount > 0 AS UniqueClickedCount
FROM Retention.Events_View
WHERE Realm = 'some data' AND Sent >= 'from date' AND Sent <= 'to date'
GROUP BY Sent, MessageId, Identity)
GROUP BY Sent, Identity)
GROUP BY Date. Хотелось бы выполнить основной запрос (3-й по вложенности) и вложенный подзапрос (2-й по вложенности) на локальных узлах, т.к. в GroupBy есть ключ шардирования, в самый верхний запрос уже доагрегировать на узле к которому стучится клиент. Сейчас по метрикам потребления памяти на узле к которому стучится клиент, кажется, что агрегацией занимается тот узел, к которому стучится клиент (т.к. данные скачиваются на него), т.к. там память для запроса утекает ну очень сильно. -
-
Можно как-то запрос переписать так, чтобы он весь выполнялся на локальных узлах, а потом происходила доагрегация всех результатов на том узле, куда клиент пришел?
-
Можно через view пихнуть, но это костыль
https://clickhouse.tech/docs/en/sql-reference/table-functions/view/#viewview | ClickHouse Documentationview Turns a subquery into a table. The function implements views (see CREATE VIEW). The resulting table doesn't store d
-
Но это ведь даже и не агрегат
-
Непонятно зачем вам два уровня подзапроса, почему не sumIf ?
-
Спасибо, про uniqExact почитаю. Не знал про эту функцию.
-
да вам кажется, что даже uniqExact не нужен, простой sumIf достаточно
-
Можно конечно решить задачу банально рассчитывая ключ шардирования в коде клиента, и зная количество шард сделать 10 запросов ( по запросу на каждую) и уже в коде сделать суммирование по датам. Но это совсем не гибко.
-
Мне не понятно, что мешает переписать запрос на что то подобное:
SELECT
Date,
SUM(SentCount) AS AllSent,
SUM(OpenedCount) AS AllOpened,
SUM(ClickedCount) AS AllClicked,
uniqExact(Sent,Identity) AS UniqueSent,
countIf(OpenedCount > 0) AS UniqueOpened,
countIf(ClickedCount > 0) AS UniqueClicked
FROM Retention.Events_View
WHERE (Realm = 'some data') AND (Sent >= 'from date') AND (Sent <= 'to date')
)
GROUP BY Date -
Ага, понял вас. Сейчас почитаю как работает uniqExact.
-
Спасибо! Действительно полезная функция для моей задачи.
-
вернул кластер на 20.9.2.20. Ошибка ушла все работает....
-
та же конфигурация машин. только пакеты заменил. Конфиги те же
-
А еще подскажите, по поводу ключа сортировки. В данный момент ключ сортировки для мат вью выбран исходя из фильтров в условии WHERE. Проанализировав количество запросов с использованием фильтров пришел к выводу, что фильтр в 95% случаев используется только по датам, и по 2 другим полям. Остальные поля в фильтре очень редко используются. Если сделать ключ сортировки по Date, двум полям, которые практически во всех запросах используются в WHERE, поля группировки - это сильно ускорит запрос? Будет ли как-то при группировке индекс использоваться? Или лучше замерить?
-
Всем привет.
пытаюсь удалить старые данные через удаление партиции
ALTER TABLE history DROP PARTITION '202101'
ругается и говорит "Type mismatch in IN or VALUES section"
судя по всему нужно еще что-то указать но не пойму что
тут ничего подобного нет
https://clickhouse.tech/docs/ru/sql-reference/statements/alter/partition/#alter_drop-partition
подскажите плиз. версия достаточно старая 19.15.3.6 возможно там другой синтаксис былPARTITION | Документация ClickHouseМанипуляции с партициями и кусками Для работы с партициями доступны следующие операции: DETACH PARTITION — перенести пар
-
ALTER TABLE history DROP PARTITION ID '202101'; попробуйте
-
Спасибо большое, помогло.
-
Вообще как совет лучше всегда делать манипуляции с партициями через ID
-
почему может быть ошибка
DB::Exception: Cannot parse input: expected \t before: \n1476808621985072019\t32937699\t2017-05-05\n1476808621985072019\t32937699\t2017-05-05\n1476808621985072019\t32937699\t2017-05-05\n1476808621985072019\t32937699\t2017-05-05 (version 19.16.4.12)
?
Параметры при запросе
{u'query': u'INSERT INTO db.table FORMAT TabSeparatedWithNames ', u'input_format_allow_errors_num': 99999, u'input_format_tsv_empty_as_default': 1, u'input_format_allow_errors_ratio': 1}
не помогают
MergeTree()
поля не Nullable -
MV не читает таблицу, ей все равно какой-там ключ сортировки.
ключ сортировки надо выбирать исходя
1. из используемого движка
2. из похожести данных, чтобы увеличить компрессию
3. из условий запросов where ...
4. индекс primary key может не совпадать c order by (быть префиксом ключа сортировки)
Очень часто помогает трюк ORDER BY a, toStartOfHour(ts), b, ...., ts
абстрактно все это тяжело объяснить. Надо видимо сделать лекцию, часа на два. -
Понял. Спасибо.
-
И похоже у Яметрики очень которткие ORDER BY , буквально из 3 или 2х полей (таких чтобы кардинальность оставалась маленькой), для того чтобы работал sampling, это нигде не объяснено, и хрен догадаешься.
-
копия вопроса на so https://stackoverflow.com/questions/67230504/clickhouse-cannot-parse-input-expected-t-beforeClickhouse Cannot parse input: expected \t before
I am trying to insert data into clickhouse using yandex logs api (https://github.com/yndx-metrika/logs_api_integration) It uses requests as a library to send request. My error is: Code: 27, e.displ...
-
какой то баг
очень странно что он у вас не воспроизводится на clusterAllReplicas() там тот же механизм создается distributed таблица на лету
а воспроизводится только на вашей distributed таблице..
возможно надо попробовать последний stable 21.4 -
по идее могу свичнуть. Главное что бы возможность откатить была.
-
21.4.4.30 ?
-
оно
но лучше конечно сначала на стенде каком нибудь проверить что с вашим конфигом откатиться можно
прямо вот так 100% переключиться советовать не буду -
это и есть стенд. тут прогоны до попадания на прод =)
-
свичнул
-
сейчас подам нагрузку.
-
если воспроизведется
то надо какой то minimal reproducible project на docker-compose сделать -
воспроизвелось. Причем на новом кейсе. дистрибютед таблица + словарь. Без таблицы в памяти
-
пусть тут тоже полежит
-
2021.04.23 13:38:27.202595 [ 2571 ] {7f44d23b-db70-4235-9d67-38fdd6ee984e} <Warning> TCPHandler: Client has gone away.
2021.04.23 13:38:27.202600 [ 2647 ] {a3c948d4-8a32-4fa1-99bd-74e7dd927955} <Warning> TCPHandler: Client has gone away.
2021.04.23 13:38:27.204699 [ 2570 ] {2325b7fc-3be3-438d-a62a-a8deeb9fc046} <Error> executeQuery: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe, while writing to socket (192.168.0.172:45494) (version 21.4.4.30 (official build)) (from 192.168.0.172:45494) (in query:
SELECT a_784586213.geoname_id, a_784586213.locale_code, a_784586213.continent_code, a_784586213.continent_name, a_784586213.country_iso_code, a_784586213.country_name, a_784586213.subdivision_1_iso_code, a_784586213.subdivision_1_name, a_784586213.subdivision_2_iso_code, a_784586213.subdivision_2_name, a_784586213.city_name, a_784586213.metro_code, a_784586213.time_zone, a_784586213.is_in_european_union FROM DB.local_geoipData AS a_784586213 WHERE geoname_id = dictGetUInt64('geoip2', 'geoname_id', tuple(IPv4StringToNum('172.23.0.1')))), 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) @ 0x8914f0a in /usr/bin/clickhouse
1. DB::WriteBufferFromPocoSocket::nextImpl() @ 0xf3bf255 in /usr/bin/clickhouse
2. DB::TCPHandler::sendProfileInfo(DB::BlockStreamProfileInfo const&) @ 0x101676af in /usr/bin/clickhouse
3. DB::TCPHandler::processOrdinaryQueryWithProcessors() @ 0x10162da8 in /usr/bin/clickhouse
4. DB::TCPHandler::runImpl() @ 0x1015c165 in /usr/bin/clickhouse
5. DB::TCPHandler::run() @ 0x1016d5c9 in /usr/bin/clickhouse
6. Poco::Net::TCPServerConnection::start() @ 0x1282790f in /usr/bin/clickhouse
7. Poco::Net::TCPServerDispatcher::run() @ 0x12829321 in /usr/bin/clickhouse
8. Poco::PooledThread::run() @ 0x1295fa49 in /usr/bin/clickhouse
9. Poco::ThreadImpl::runnableEntry(void*) @ 0x1295b8aa in /usr/bin/clickhouse
10. start_thread @ 0x76db in /lib/x86_64-linux-gnu/libpthread-2.27.so
11. __clone @ 0x12171f in /lib/x86_64-linux-gnu/libc-2.27.so
2021.04.23 13:38:27.204768 [ 2570 ] {2325b7fc-3be3-438d-a62a-a8deeb9fc046} <Error> TCPHandler: Code: 210, e.displayText() = DB::Exception: I/O error: Broken pipe, while writing to socket (192.168.0.172:45494), Stack trace:
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x8914f0a in /usr/bin/clickhouse
1. DB::WriteBufferFromPocoSocket::nextImpl() @ 0xf3bf255 in /usr/bin/clickhouse
2. DB::TCPHandler::sendProfileInfo(DB::BlockStreamProfileInfo const&) @ 0x101676af in /usr/bin/clickhouse
3. DB::TCPHandler::processOrdinaryQueryWithProcessors() @ 0x10162da8 in /usr/bin/clickhouse
4. DB::TCPHandler::runImpl() @ 0x1015c165 in /usr/bin/clickhouse
5. DB::TCPHandler::run() @ 0x1016d5c9 in /usr/bin/clickhouse
6. Poco::Net::TCPServerConnection::start() @ 0x1282790f in /usr/bin/clickhouse
7. Poco::Net::TCPServerDispatcher::run() @ 0x12829321 in /usr/bin/clickhouse
8. Poco::PooledThread::run() @ 0x1295fa49 in /usr/bin/clickhouse
9. Poco::ThreadImpl::runnableEntry(void*) @ 0x1295b8aa in /usr/bin/clickhouse
10. start_thread @ 0x76db in /lib/x86_64-linux-gnu/libpthread-2.27.so
11. __clone @ 0x12171f in /lib/x86_64-linux-gnu/libc-2.27.so
2021.04.23 13:38:27.204935 [ 2570 ] {2325b7fc-3be3-438d-a62a-a8deeb9fc046} <Warning> TCPHandler: Client has gone away. -
CREATE TABLE DB.local_geoipData
(
geoname_id UInt64,
locale_code String,
continent_code String,
continent_name String,
country_iso_code String,
country_name String,
subdivision_1_iso_code String,
subdivision_1_name String,
subdivision_2_iso_code String,
subdivision_2_name String,
city_name String,
metro_code String,
time_zone String,
is_in_european_union Int8
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/local_geoipData ', '{replica}')
ORDER BY (geoname_id, locale_code, continent_code)
SETTINGS index_granularity = 8192
CREATE TABLE DB.geoipData
(
geoname_id UInt64,
locale_code String,
continent_code String,
continent_name String,
country_iso_code String,
country_name String,
subdivision_1_iso_code String,
subdivision_1_name String,
subdivision_2_iso_code String,
subdivision_2_name String,
city_name String,
metro_code String,
time_zone String,
is_in_european_union Int8
)
ENGINE = Distributed('DB_cluster', 'DB', 'local_geoipData', intHash64(geoname_id)) -
Попробую сделать. Но к сожалению нагрузку не уверен что смогу воссоздать без стейжей своих
-
субъективно еще версии 21.* медленней работают чем 20.9 текущая. Но это без метрик к сожалению, на глаз....
-
нельзя такое в TSV
input_format_tsv_empty_as_default не для этого -
данные так выглядят
ClientID CounterID Date
55 33 2017-05-05
55 33 2017-05-05
55 33 2017-05-05
55 33 2017-05-05
55 33 2017-05-05
55 33 2017-05-05
55 33 2017-05-05
55 33 2017-05-05 -
uname -a (ядро какое)?
-
а инсерт как выглядит? сколько полей в таблице?
-
все тоже самое кроме DEB пакетов сервера
https://monosnap.com/file/97EVnY95vCbVeebzI1PTpE5sFlAQki
20 версия
https://monosnap.com/file/0CYNqHnJ5IwOcOdYrBeeYwUYxqqPPv
21 версия -
uname -a
Linux c1-s2-r2 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux -
полей в таблице много, вставляю только часть полей в инсерте
INSERT INTO db.table FORMAT TabSeparatedWithNames -
проблема в 21.4 я правильно понял?
попробуйте
cat /etc/clickhouse-server/users.d/dis_async.xml
<?xml version="1.0" ?>
<yandex>
<profiles>
<default>
<async_socket_for_remote>0</async_socket_for_remote>
<use_hedged_requests>0</use_hedged_requests>
</default>
</profiles>
</yandex>
там баг в ядрах ниже 5...чего-то -
секунду. создам файл и перенагружу.
-
Дэн, ты велИк и могУч!
-
ну не умеет такого КХ.
Делайте select into T(a,b,c) -
я угадываю подбрасывая кубики. Вот если поможет, тогда можно хвалить
-
💔
спасибо -
Похоже помогло. Пока не ловлю. Сейчас довешу нагрузки, но вроде вылечилось. И скорость отработки АПИ выровнялась.
а есть вообще где почитать про эти опции поподробней?
https://clickhouse.tech/codebrowser/html_report/ClickHouse/src/Core/Settings.h.html -
Ребят, спасибо! Крутой продукт и вы крутые =) Пользуясь случаем, так сказать. Спасибо вам.
-
денни кран вроде из altinity, а ch проект яндекса?
-
немного не понял вопроса. но вроде как да =) про ch
-
И если Вас не затруднит, можете скинуть информацию по багу в ядре? если я верно истолковал опции - мне для поднятия скорости хорошо бы вернуть ассинк работу с сокетами. Соотв найти ядро с исправленным багом.
-
ну как сказать, я лично написал кучку документации, поправил несколько строк кода и написал кучку тестов и воспроизвел десятки критичных багов.
и вообще 46% pull requests в последних релизах сделано не Яндексом уже
из них 30% это Альтинити.
В Альтинити кажется рабоает уже примерно столько же c++ девелоперов, которые работают над кодом КХ, как и в Яндексе
DateTime64 / odbc (перепилен и поддерживается) / Delta DoubleDelta/ tiered storage / Ldap Kerberos -- это то что я помню из функциональности сделанной Альтинити -
https://github.com/ClickHouse/ClickHouse/pull/22109
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=339ddb53d373
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0c54a6a44bf3Disable async_socket_for_remote/use_hedged_requests for buggy linux kernels by azat · Pull Request #22109 · ClickHouse/ClickHouseChangelog category (leave one): Bug Fix Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Disable async_socket_for_remote/use_hedged_requests for buggy...
-
Спасибо огромное!
-
Парни, как увеличить таймаут к внешним mysql словарям?
-
что-то застыли... хотя на reload отрабатывают
-
LIFETIME имеется ввиду? или что?
SHOW CREATE TABLE dictionary_name
что у вас в source и layout ? -
нене... словари через xml заданы
-
что в system.dictionaries ? ошибки есть какие то?
-
лайфтам стоит от 10 до 60
-
ошибки в логах хауса?
-
вот в system.dictionaries и вижу что не обновляются
-
а лайфтайм это минуты или секунды?
-
секунды
-
ошибки в system.dictionaries там поле есть типа last_exception и т.п.
еще вроде была для XML возможность задать invalidate query по которому проверяется что надо новые данные грузить -
эксепншенов нет. там походу глючок... у меня стояло 10 - отрабатывало. Я поставил 60 сек и дело встало... счас попробую на 10-20 вернуть
-
Подскажите почему HTTP запрос возвращающий DB::Exception отдаёт 200 ОК? Что-то не так отправляю?
ClickHouse server version 20.8.9 revision 54438
curl -i -X POST 'http://localhost:8123?send_progress_in_http_headers=1' -d 'SELECT device_type from table LIMIT 1 format Parquet'
HTTP/1.1 200 OK
Code: 50, e.displayText() = DB::Exception: The type "Enum8" of a column "device_type" is not supported for conversion into a Parquet data format: While executing ParquetBlockOutputFormat (version 20.8.9.6 (official build))
Если убрать параметр send_progress_in_http_headers из урла, то возвращает 404. Или например если задать несуществующую колонку в sql запросе, то отдаст 404 -
10-20 секунд у вас полностью таблица \ SQL quey истоник будет перечитываться
-
да. у меня они небольшие
-
пусть читаются
-
send_progress_in_http_headers
ее лучше вообще убирать, эта штука так себе работает с HTTP -
нет, дело не в секундах, не помогло
-
эксепшенов нет, ошибок в логе нет... а дата перечитываания словарей не двигается
-
понял, спасибо
-
Всем привет, пытаюсь создать distributed таблицу
CREATE TABLE event_distributed ON CLUSTER '{{.MIGRATIONS_CLUSTER_NAME}}' AS event_local
Но на локальной таблице висит TTL, ругается что Distributed его поддерживает, как лучше сделать чтобы без ttl создать distr? Или дублировать колонки надо? -
Это нормально, КХ не может знать если исполнение завалится в рантайме, т.е. если нет явной ошибки и запрос запущен будет 200 с периодическими хедерами статуса
-
тоесть недостаточно проверять что статус 2ХХ, но ещё надо парсить тело ответа на что-то типа /Code: \d+, e.displayText() = DB::Exception/ ??
-
да, более того у вас обычный запрос без прогресса тоже может начать стримить результат и умереть...
-
-
нич не понимаю - system reload dictionary 'xxxx' отрабатывают, самый большой loading duration 0.063. Но автоматом раз в хх секунд ничего не читается. Изменение в xml файле словаря - перечитывается... как жить то дальше ))))
-
объяснять проблему получше... чего и куда там раз в ХХ секунд должно читаться
-
отбой, убрал ttl, и добавил его через alter table local после создания distributed, сработало
-
вот словарь. Надеюсь на его перечитку раз в 60 сек
-
invalidate_query убирал - не помогает
-
есть 3 базы данных - две спящих, одна боевая. со спящих читается, а с боевой нет. Вот возникла идея - мож таймаут отваливается при автоматической зачитке
-
боевая под нагрузкой всеже
-
попроболвал переключить на чтение словаря с резервного сервера - тоже самое. Измение хмл-файла - читается. И все на этом
-
автообновления нет
-
http://localhost:8123?send_progress_in_http_headers=1&wait_end_of_query=1
так всеравно 200 ОК с ошибкой
без send_progress_in_http_headers всё ок -
ага... Вот оно:
для MySQL 8 необходимо отключить кеширование мета-информации в MySQL set global information_schema_stats_expiry=0
Скинулось после рестарта сервака -
Добрый вечер. Вопрос , скорее всего понятийного характера. Есть сырые данные вида (date_time, uid_from UInt32, uid_to UInt32 и еще 10 колонок - все целочисленные). Они попадают , как в MergeTree , так и AggregatingMergeTree. Запросы вида prewhere date_time between x and y where uid_from = или uid_to=. С аггрегацией проблем нет - время отклика удовлетворяет. Все хуже, когда человек хочет получить сырые данные из MergeTree. При таком запросе восникает iowait (смотрел в glances), полная утилизация диска. Храним 2 таблицы MT - одна order by (uid_from , toStartOfHour(date_time)) и (uid_to , toStartOfHour(date_time)). Сознательно уменьшали index_granularity с дефолтного значения до 256, надеясь, что это как-то должно разгрузить диски. Строк ~30-40kk в день. Менять диски, и вообще оборудование - нельзя 😊. уходить от кх куда-то в более подходящее для такого (кассандра и т.д) тоже не вариант, в силу инертности персонала. Есть идея (навеяно https://www.percona.com/sites/default/files/ple19-slides/day1-pm/clickhouse-for-timeseries.pdf) загружать все в одну таблицу - где сортировка будет (uid, direction, date_time), а остальное запихнуть, например в массив. Подскажите, правильное ли направление мыслей, или же исходная схема имеет место быть, и но проблемы не из-за архитектурного решения, а из-за железа?
-
>prewhere date_time between x and y where uid_from = или uid_to=
и сколько таких запросов одновременно? Сколько строк они возвращают? Partition by что? сколько партиций сканирует запрос? Order by у select-а есть? -
Запросов одновременно ~10-15. Строк возвращают по разному - начиная от десятков строк, заканчивая миллионом ( файлы порой несколько Гб). Партиции недельные - диапазон дат тоже разнится , чаще всего 2-3 месяца, нужна полная статистика , например , начиная с начала года. Сортировка order by toStartOfHour одновремя была, сейчас вообще отключили .
-
т.е. КХ выступает в роли block storage ? Я сомневаюсь что тут поможет что-то типа кассандры. По описанию вам просто надо читать очень много, и диски физически не могут выдать больше. Я бы начал с оптимизации диска на уровне железа и линукса, типа используется железный раид, убрать ...
-
Не совсем понимаю данный термин, но чтение действительно преобладает. Raid10 , везде. Железный. По поводу оптимизации линукса - смотрел в документации кх, выставлял параметры , которые в ней указаны. Хоть, хоть как-то сделать чуть лучше, хотим с lz4 на zstd перепрыгнуть, но по ощущениям , большого выигрыша ждать не стоит.
-
-
железные рейды зачастую узкое место, у них очень слабые cpu , он не могут процессить с такой скоростью как современные HDD отдают.
Я как-то раз переключил lsi-что-то там в режим hba, сделал из тех же самых 12 HDD софт-раид и получил перфоманс *2 в КХ на запросах которым надо много читать -
можно удалить. Вот я тут статейку накидал https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-system-tables-eat-my-disk
-
Благодарю.
-
query_thread_log_0 это вообще старая таблица, при апгрейде КХ переименовывает query_thread_log -> query_thread_log_0 -> query_thread_log_1
-
если структура таблицы меняется
-
благодарю. можно транкейтнуть смело?
-
да , и даже дроп
-
но в ней свежие записи, от сегодня
-
точно не query_thread_log ?
их всех можно дропать, это логи для пользователей -
можно отключить вообще
$ cat /etc/clickhouse-server/config.d/z_log_disable.xml
<?xml version="1.0"?>
<yandex>
<asynchronous_metric_log remove="1"/>
<metric_log remove="1"/>
<part_log remove="1" />
<query_log remove="1" />
<query_thread_log remove="1" />
<text_log remove="1" />
<trace_log remove="1"/>
</yandex> -
(нужен рестарт)
-
да, это в статье прочитал уже
-
Progress убрать
-
добрый. Простите, я тут опять спрошу
-
4 часа под нагрузкой
-
вижу такое
-
2021.04.23 23:53:06.901464 [ 2840 ] {25bb07d6-4bbd-4ac1-8516-f5cbd3883fe6} <Warning> ConnectionPoolWithFailover: Connection failed at try №1, reason: Code: 32, e.displayText() = DB::Exception: Attempt to read after eof (version 21.4.4.30 (official build))
2021.04.23 23:53:07.118414 [ 3077 ] {647f530f-858e-4486-94e8-5804bdef29c6} <Warning> ConnectionPoolWithFailover: Connection failed at try №1, reason: Code: 32, e.displayText() = DB::Exception: Attempt to read after eof (version 21.4.4.30 (official build)) -
на каждом шарде по 20-30 сообщений прилетает
-
под нагрузкой только
-
данные валидны.
Linux c1-s1-r1 4.15.0-142-generic
21.4.4.30
опции -
<yandex>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<async_socket_for_remote>0</async_socket_for_remote>
<use_hedged_requests>0</use_hedged_requests>
<!-- Maximum memory usage for processing single query, in bytes. -->
<max_memory_usage>10000000000</max_memory_usage>
<max_query_size>1000000000</max_query_size>
<log_queries>0</log_queries>
<log_query_threads>0</log_query_threads>
<connect_timeout_with_failover_ms>2000</connect_timeout_with_failover_ms>
<distributed_product_mode>local</distributed_product_mode>
<joined_subquery_requires_alias>0</joined_subquery_requires_alias> - 24 April 2021 (38 messages)
-
-
Connected to ClickHouse server version 21.4.4 revision 54447.
-
это стейж, но опять таки лог под нагрузкой говорит
-
такое
-
-
Linux c1-s1-r2 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
-
опции по сокетам сделаны
-
а на что это влияет?
clickhouse перечитывает каким то отдельным запросом метаданные из information_schema и там это как то подвисает или что? -
Видимо да. Зачитал, там update_time не сменилось - значит можно не перезапрашивать. Странно только что mysql это поле хешит
-
Коллеги, а кто-нибудь сталкивался с тем что при insert в CH не происходит добавление в базу ?
-
Какой движок у таблицы, через что вставляете?
-
Через php таблица mergetree
-
не distibuted и не replicated?
как понимаете, что данные не вставились? -
Не просто mergedtree, дебагом смотрю что запрос выполнился успешно и смотрю в таблице а записи нет:(
-
КХ для mysql делает show table ... и смотрит update_time. А в 8м mysql включили кеширование по умолчаниию и обновляют инфу раз в сутки.
-
TTL на таблице удаляет в момент инсерта?
-
Я не силён в кликхаусе. А что за ttl на таблице?
-
покажите show create table таблица
-
Мне дико не ловко. Но я отошёл от компьютера :(
-
ничего страшного, мы никуда не спешим. Потом покажите
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttlMergeTree | Документация ClickHouseMergeTree Движок MergeTree, а также другие движки этого семейства (*MergeTree) — это наиболее функциональные движки табл
-
Привет, помогите советом. Очень надо повесить на колонку индексацию, только одно но, там может быть NULL, clickhouse не дает добавить на эту колонку индекс.
Скорее всего, у вас, профессионалов, уже есть определенные хитрости, как это сделать, можете поделиться? Или все таки никак? -
тип поля? Зачем вам null?
зависит от версии КХ, есть параметр allow_nullable_key https://github.com/sevirov/ClickHouse/blob/4da5882bec3e9b4cdc7af9079a259a1563be0ce5/docs/en/operations/settings/settings.md#allow_nullable_key-allow-nullable-key
но поиска по индексу where ... is null кажется не будет -
Тип поля Int
Это поле не обязательное, поэтому там может быть NULL
Искать мне нужно как раз по значению, не NULL -
-
Ну и храните -999999999999 вместо null
-
ну да, это первое что мне пришло в голову, но хотел все таки уточнить)
Наверное попробую активировать allow_nullable_key
Спасибо! -
null корректно работает с аггрегирующими столбцами типа anyLatst и не перезатирает там последнее значение, а -999999999999 перезатирает и тогда приходится городить argMax, а он усложняет запросы и больше хранит данных на диске, хотя и полезен при многопоточной вставке, когда нужна гарантия, что значение действительно последнее
-
Привет, можно ли мгновенно получить последнюю запись по времени или инкрементально возрастающему ID, не используя MV => CollapsingMergeTree?
-
Ну или более общая задача: как можно эффективно получить последнюю запись какого-нибудь датчика IoT или грузовика в дороге (TimeSeries)? Или последнее состояние всех датчиков сразу?
-
anyLast?
-
ааа. 5 сек
-
allow_nullable_key? Ого, внезапно. А почему оно по дефолту выключено? Какие подводные камни?
-
Это не то. Нужно быстро получить последнее состояние.
-
argMax(tuple(*), t) ?
-
Потому что никто ее не тестировал. И не рекомендуется использовать с точки зрения перфоманса.
Кх тормозит. -
Не, это сканирует все 8 млрд. записей.
-
так если индексы по времени есть, то должно быть ок. но если нету, то да нужна какая-то специфическая низкоуровневая функция типо как в mysql last_insert_id или типо того
-
Время и инкрементальный ID есть в ключе сортировки таблицы. Но сканировать все подряд не вариант конечно. Буду пробовать с MV.
- 25 April 2021 (60 messages)
-
Aggregating движки
-
Уже реализовал вчера. Все работает мгновенно.
-
Да тут и простого Replacing хватит
-
Привет. Год назад Михаил Филимонов говорил о реализации атомарных MV в ближайшем будущем. Подскажите, пожалуйста, есть ли прогресс?
-
Прогресс есть,
https://github.com/ClickHouse/ClickHouse/issues/22086
есть RFC и ожидание, что будет сделано в этом году.[RFC] Limited support for transactions in MergeTree tables · Issue #22086 · ClickHouse/ClickHouseUse case Main use cases: Ability to execute multiple INSERTs (maybe into multiple MergeTree tables, including materialized views, #11909) in a single "transaction". All INSERT que...
-
Доброго времени суток коллеги. Используем на службе ELK стек. В качестве альтернативы, планируем перейти так сказать на отечественное ПО -), есть ряд вопросов, прошу знатоков, помочь с ответами:
1. В КликХаусе, есть аналог Кибаны?
2. В индексы КликХаус можно грузить данные из xls или csv файлов?
3. Возможен ли, так называемый массовый поиск: к примеру есть у нас огромное количество индексов, содержимое индексов разное, но во всех присутсвует поле: serialnum, так вот можно ли по всем индексам искать интересующие значение ? А если этих значений 1000 ? Поддерживается ли массовый поиск одной командой, с выводом результата что найдено а что нет ? -
КХ это не про полнотекстовый поиск.
Это колоночная СУБД с sql синтаксисом, иногда, с кастомным синтаксисом
Но .
1. Кибаны нет (суперсет/табикс)
2. Да, загружать в таблицы можно разные форматы https://clickhouse.tech/docs/ru/interfaces/formats/amp/
3. КХ и рассчитан на массовый поиск/вставку/апдейт. Точечные операции - не про КХ -
1) есть 3rd party типа tabix, но с кибаной рядом не валялось. но любой другой опен сорс БИ поставить можно, под популярные есть драйвера
2) нет понятия индексы КХ. это просто колоночная ДБ со всеми вытекающими. Это не полнотекстовый текст. в колонки сами будете раскладывать важные поля.
3) можно, если нечасто но лучше используйте ЭЛК -
Информацию принял, ELK как раз и пользуем для полнотекстового поиска. Отчегото считал, что КХ может его заменить. Перечитаю документацию. Но вот в ELK нельзя делать массовый поиск.
-
Вот есть статья, но это больше похоже на большой sql full-text search костыль. КХ не заменит полноценный фул-текст сёрч стек, типа ЭЛК
https://m.habr.com/ru/post/304602/Разрабатываем систему real-time fulltext-поиска по error-логам на основе ClickHouse от ЯндексаВ этой статье я расскажу о том, как разработать систему для индексирования и полнотекстового поиска error-логов (или любых других логов) на основе СУБД от Яндекса под названием ClickHouse. Про саму...
-
Ознакомлюсь, благодарю.
-
привет, есть табличка с сотней полей, одно из полей - Name, обозначающее название группы. Распределение по количеству записей в группах примерно такое: https://i.tk-chel.ru/denisio/202104/25_194209.png
-
в типовых запросах всегда используется название группы. Всегда. Есть ли смысл разложить на 30 таблиц с одинаковой структурой - по одной на каждую группу?
-
или оставить в одной таблице всё и оставить в запросах where Name='Overspeed' and ... ?
-
а это же можно через invalidate_query разрулить как то?
-
@BloodJazMan ёу, чо скажешь :)
-
А вам нужен именно полнотекстовый поиск или поиск по шаблону или поиск по подстроке? Это очень разные сценарии )
-
https://eng.uber.com/logging/
ну если железо становится дороже людей то можно что угодно накостылять...Fast and Reliable Schema-Agnostic Log Analytics PlatformAt Uber, we provide a centralized, reliable, and interactive logging platform that empowers engineers to work quickly and confidently at scale. The logs are tag
-
ну можете сделать партишнинг/субпартишнинг по именам и не надо 30 таблиц...
-
Таак интересно уже -) есть серийный номер содержащий в себе иногда только цыфры, а иногда содержит пару букв в начале а затем идут цифры, как пример: 1234567890 или abc1234567890. в кибане делаем: запрос через веб интерфейс: serialnum: *1234567890. В результате на выдаче имеем на выдаче все индексы + содержимое строки где встречалась искомая комбинация
-
Если надо поискать информацию по ФИО сотрудника то порядок аналогичен.
-
Единственно не умеем делать масовые запросы
-
Это поиск по подстроке, это уже несколько проще.
Массовый запрос в вашем понимании - это "по всем полям вообще", я правильно понимаю? Т.е. искать 1234 и в серийном номере и в ФИО? -
Массовый поиск в моем понимании: это с помошью одного запроса послать на поиск по 1000 номеров
-
или же по 1000 ФИО
-
Ага, такое есть (но мне казалось, что и ELK умеет такое, в люцене вроде бы нужные функции были).
-
я лично не нашел. у нас стак: эластик + логстеш + кибана
-
-
Вопрос мне адресован ?
-
Да, к вам.
-
тогда эт не полнотекстовый, можете КХ использовать. но все поля по которым идет поиск надо держать в отдельных колонках.. и все
-
у нас организовано так: от поставщика получаем список вида: серийник;модель; и прочие колонки с ТТХ. для каждой поставки свои индекс.
-
есть так же куча индексов вида: подразделение, отделение, ФИО, должность, модель устройства которые выдано
-
такого плана
-
Принял пасеб, изучу мат часть, потренируюсь на кошках -)
-
единственно как пологаю, для массового поиска нажо составить SQL запрос ?
-
проблема в том, что в таблице КХ индекс один, кластерный (скип индексы это не совсем индексы). И поиск где нет первых полей индекса будет делать фул скан
Можно просто дублировать данные с другими индексами в принципе...
еще можно делать для высококардинальных колонок prewhere, будет норм...
один сложный запрос - для КХ самое то...
надо пробовать -
Принял, пасеба.
-
-
пока одна проблему у ELK осушествлять массовый поиск
-
принял, буду изумать материалы, благодарю.
-
Ну, значит данных не очень много.
-
около полумиллиарда
-
Ну, не очень много, да.
-
так точно
-
так вопрос еще, в КХ можно создавать пользователей и вести логи, в том плане что бы смотреть какие запросы делал пользователь ?
-
да
да -
Принял
-
вообще особо смысла нет
тип LowCardinality(String) и поле в PK должно быть длябыстрой выборки -
в 21.4 experimental feature - Zero-copy replication for ReplicatedMergeTree over S3 storage. Это то что я думаю? новая реплика подтягивает данные из S3 автоматически не создавая копию? https://github.com/ClickHouse/ClickHouse/pull/16240S3 zero copy replication by ianton-ru · Pull Request #16240 · ClickHouse/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
пробовал читать описание - но там даже по русски сложно понять что оно делает
-
Привет. Как разложить данные из таблицы с одним столбцом типа string , в строках лежит json в другую таблицу с столбцами - ключами json. Заранее, спасибо.
-
Не совсем, это разновидность диска s3, просто все реплики шарят один и тот же набор данных в с3
-
Да, я это и имел ввиду - типа если у меня допустим только s3 диск то при запуске новой реплики - она сразу готова к жксплуатации?
-
Вроде так и задумывалось
-
Прям порадовали старика - отличная новость
-
https://github.com/ClickHouse/ClickHouse/issues/23634#issuecomment-826374602
alexey-milovidov : allow_nullable_key is a nonsense, this setting should not be used in production.Nullable key and where != produces wrong result. · Issue #23634 · ClickHouse/ClickHouse20.8.18.32, 21.3.8.76, 21.4.5.46 CREATE TABLE test001 (id Nullable(String), s Nullable(String), s1 Nullable(String)) ENGINE = MergeTree() ORDER BY (id,s,s1) SETTINGS allow_nullable_key = 1; INSERT ...
-
😂 спасибо
-
странно ограничивать это S3, можно было добавить НФС и любой cluster - FS уже...
-
Согласен
- 26 April 2021 (160 messages)
-
Привет. подскажите, почему при выполнении "Set allow_experimental_window_functions = 1" получаю ошибку: ClickHouse exception, code: 113, e.displayText() = DB::Exception: There is no session (version 21.4.3.21 (official build))
-
потому что в JDBC нужно включить сессию , в параметрах соединения создать новую настройку , session_id = любая строка.
но проще просто включить в профиле пользователя. -
спасибо, получилось через сессию. как через профиль пользователя включить в sql не нашёл, зато нашёл что можно в конце запроса добавить параметры через SETTINGS - так тоже работает, выберу этот вариант
-
-
помогло, когда было одинаковое кол-во колонок (и сами колонки) в destination таблице и в данных на вход
-
Товарищи, возникает такая ошибка, (похоже, во время мутации) хотя места свободно вроде 35 из 48 гб:
2021.04.23 16:46:03.485180 [ 14501 ] {} <Error> void DB::BackgroundProcessingPool::workLoopFunc(): Poco::Exception. Code: 1000, e.code() = 28, e.displayText() = File access error: no space left on device: /data/base/clickhouse/data/default/metrics/tmp_clone_8e0a4cdf946227b2fed279037d117c58_225030_225030_0_231161, Stack trace (when copying this message, always include the lines below):
0. Poco::FileException::FileException(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) @ 0x18ba945f in /usr/bin/clickhouse
1. Poco::FileImpl::handleLastErrorImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x18bb58e1 in /usr/bin/clickhouse
2. ? @ 0x18bb5c37 in /usr/bin/clickhouse
3. Poco::File::createDirectories() @ 0x18bb3ed0 in /usr/bin/clickhouse
4. DB::DiskLocal::createDirectories(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x1557e8cf in /usr/bin/clickhouse
5. ? @ 0x161bab28 in /usr/bin/clickhouse
6. DB::localBackup(std::__1::shared_ptr<DB::IDisk> 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::optional<unsigned long>) @ 0x161baef0 in /usr/bin/clickhouse
7. DB::MergeTreeData::cloneAndLoadDataPartOnSameDisk(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::MergeTreePartInfo const&, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&) @ 0x15fb0d45 in /usr/bin/clickhouse
8. DB::MergeTreeDataMergerMutator::mutatePartToTemporaryPart(DB::FutureMergedMutatedPart const&, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, DB::MutationCommands const&, DB::MergeListEntry&, long, DB::Context const&, std::__1::unique_ptr<DB::IReservation, std::__1::default_delete<DB::IReservation> > const&, std::__1::shared_ptr<DB::RWLockImpl::LockHolderImpl>&) @ 0x16000409 in /usr/bin/clickhouse
9. DB::StorageMergeTree::tryMutatePart() @ 0x15dddbfe in /usr/bin/clickhouse
10. DB::StorageMergeTree::mergeMutateTask() @ 0x15ddeada in /usr/bin/clickhouse
11. DB::BackgroundProcessingPool::workLoopFunc() @ 0x15f67003 in /usr/bin/clickhouse
12. ? @ 0x15f67932 in /usr/bin/clickhouse
13. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xe6345b7 in /usr/bin/clickhouse
14. ? @ 0xe632b03 in /usr/bin/clickhouse
15. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
16. __clone @ 0xfe96d in /usr/lib64/libc-2.17.so
Total space: 48.52 GiB
Available space: 35.81 GiB
Total inodes: 12.19 million
Available inodes: 11.68 million
Mount point: /data/base
Filesystem: /dev/mapper/vg_data_base-base (version 20.8.4.11 (official build)) -
ну да странно, inodes вроде тоже достаточно
а как ваши диски вообще живые?
/dev/mapper это что? железный RAID? LVM?
это виртуалка какая то или голое железо?
там кроме clickhouse кто-то еще эти диски использует?
может просто /dev/mapper врет?
у вас там какой нибудь thin provisioning не включен на RAID массиве? -
Виртуалка на vmware
Диски живые
Lvm
Кроме клика используют, но не сильно -
Ну эти самые no space left on device они из ниоткуда не берутся
по факту это просто C++ exception который вернул какой то из файловых syscall в миграции -
-
Всем привет. Есть таблица вида ts, vol1 Float64, vol2 Float64, нужно добавить колонку vol3 в которой сохранить значение vol1, а в vol1 вместо этого прописать f(vol2), но разово, без привязки к vol2 навсегда
пробовал сделал ADD column vol1, потом ALTER TABLE UPDATE vol3=vol1, ALTER TABLE UPDATE vol1=f(vol2), но почему то после последнего UPDATE изменились значения vol3 -
Настройки | Документация ClickHouse
Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
спасибо большое
-
миграции последовательные вроде должны быть и асинхронные...
то есть первый должен vol3 поменять...
а второй vol1 ...
SELECT * FROM system.migrations посмотрите -
тут на какая то дикая версия CH, еще нет этой таблицы 18.12.17. плесенью все покрылось :)
-
гхм... оно на липовый мед разложилось
ALTER UPDATE как вы написали вообще не должен был сработать =) -
ALTER TABLE db_test.table_1
UPDATE vol3=vol1
WHERE 1
вот так писал если быть точным. отработало -
в 18.x версии???
-
да
-
SELECT version()
в студию -
-
А как кликхаус обрабатывает ошибочные мутации, бывает висит с ошибкой, но через какое-то время завершается:
SELECT *
FROM system.mutations
WHERE is_done = 0
ORDER BY create_time ASC
FORMAT Vertical
Row 1:
──────
database: default
table: metrics
mutation_id: mutation_231431.txt
command: DELETE WHERE (date = toDate('2021-02-16')) AND ('e91b6059-7339-4066-852d-f4ad43999427' = dictGetString('doe', 'unt', tuple(pid)))
create_time: 2021-04-23 16:51:05
block_numbers.partition_id: ['']
block_numbers.number: [231431]
parts_to_do_names: ['a2cdf0f2d6a97772047f53a2583de118_224949_224949_0_231298']
parts_to_do: 1
is_done: 0
latest_failed_part: a2cdf0f2d6a97772047f53a2583de118_224949_224949_0_231298
latest_fail_time: 2021-04-23 17:55:07
latest_fail_reason: Code: 84, e.displayText() = DB::Exception: Part in /data/base/clickhouse/data/default/metrics/tmp_clone_a2cdf0f2d6a97772047f53a2583de118_224949_224949_0_231431 already exists (version 20.8.4.11 (official build)) -
-
Добрый день. Имеем кластер Кликхауса в Кубернетесе, управляемый Алтинити оператором, в кластере 16 шардов по 2 реплики. Данные вставляются ежесекундно по несколько тысяч записей в Distributed таблицу, на шард приходится около тысячи строк за вставку. Иногда (раз в несколько секунд на одной из реплик, всегда разные реплики) получаем ошибку
2021.04.26 09:51:36.670217 [ 623 ] {} <Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 107, e.displayText() = Net Exception: Socket is not connected, Stack trace (when copying this message, always include the lines below):
0. Poco::Net::SocketImpl::error(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x128208ae in /usr/bin/clickhouse
1. Poco::Net::SocketImpl::peerAddress() @ 0x12822b26 in /usr/bin/clickhouse
2. DB::HTTPServerRequest::HTTPServerRequest(DB::Context const&, DB::HTTPServerResponse&, Poco::Net::HTTPServerSession&) @ 0x101778e4 in /usr/bin/clickhouse
3. DB::HTTPServerConnection::run() @ 0x10176754 in /usr/bin/clickhouse
4. Poco::Net::TCPServerConnection::start() @ 0x1282790f in /usr/bin/clickhouse
5. Poco::Net::TCPServerDispatcher::run() @ 0x12829321 in /usr/bin/clickhouse
6. Poco::PooledThread::run() @ 0x1295fa49 in /usr/bin/clickhouse
7. Poco::ThreadImpl::runnableEntry(void*) @ 0x1295b8aa in /usr/bin/clickhouse
8. start_thread @ 0x9609 in /lib/libpthread.so.0
9. clone @ 0x122293 in /lib/libc.so.6
(version 21.4.4.30 (official build))
Сеть стабильная, если вставки не делать, ошибок нет. -
у вас такое ощущение что ALTER TABLE ... ON CLUSTER запустился на ReplicatedMergeTree таблице?
там скорее не retry
а просто парты кончились потому что отреплицировались... -
попробуйте async отключить
https://t.me/clickhouse_ru/215415Denny Crane [Junior support specialist at Altinity (NB,Canada)] in ClickHouse не тормозитпроблема в 21.4 я правильно понял? попробуйте cat /etc/clickhouse-server/users.d/dis_async.xml <?xml version="1.0" ?> <yandex> <profiles> <default> <async_socket_for_remote>0</async_socket_for_remote> <use_hedged_requests>0</use_hedged_requests> </default> </profiles> </yandex> там баг в ядрах ниже 5...чего-то
-
у вас какого нибудь prometheus который в 8123 порт ходит нету?
-
Ну, вообще просто MergeTree
-
Отредактировать ClickHouseInstallation будет достаточно, изменения сами разойдутся по репликам?
-
-
Нету
-
в SELECT hostName(), * FROM cluster('all-replicated',system.settings) WHERE changed изменения пришли?
-
Изменения профиля пользователя сюда тоже попадает?
-
-
ну да, это естественно
-
Alter delete 1.1.54388
Alter update 18.12.14
18.14.18 -- full proper support of where ... -
я кстати в проде использую 18.14 в одном проекте, и все ОК.
-
понял. спасибо большое. т.е. с запросами я не накосячил, нужно обновлять этого мамонта просто?
-
а у вас clickhouse_operator под каким профилем ? default?
-
k8s как расвернут и где?
bare metal? aws? gcp? -
зачем обновляться ? Любое обновление что-нибудь ломает. Надо тестировать, с 18.12 весь КХ изменился, некоторые SQL перестали работать, некоторые возвращают другой результат
-
да
-
я думал минорно обновить на 18.14.18, я не собирался выше :)
-
Привет, а нет подобного чатика, только про mysql спросить?
-
18.14.18 можно, разрешаю.
там @BloodJazMan неправильно написал имя таблицы
>...SELECT * FROM system.migrations посмотрите
она называется mutations
SELECT * FROM system.mutations where not is_done -
такая есть таблица, но по запросу пусто
-
в vmware место есть? Это очень похоже на thin provisioning
-
вообще выполненные в ней есть. везде is_done = 1
-
вы после первого update дождитесь пусто SELECT * FROM system.mutations where not is_done
а затем второй запускайте, хотя даже 18.12 мутации строго последовательно должны выполняться -
ага. принял. большое спасибо
-
Я не понимаю ваш российский новояз. Мне казалось, что "ага. принял." имеет отрицательную коннотацию: "ну ладно, так уж и быть"
-
да, должен делать.
вы обновитесь обязательно до 20.8.18 , 20.8.4.11 слишком ранний релиз -
это баг. обновитесь 21.4.5.46
-
Правильно ли я понял механизм работы данной функции argMax(id, (datast.status, datast.addedUTC)). Выберет мне id из строки в которой самый большой status и addedUTC. Просто в документации это не описано, можем есть где более подробная документация, чем на офф сайте?
-
туплы сравниваются последовательно от левого элемента, это где-то есть в доке.
короче вот такое сравнение будет работать (year, month, day) >= (2021, 04, 26) -
gcp
-
наверное это в описание туплов надо смотреть, а функция просто с ними умеет работать, спасибо
-
ну да, это не фича argMax, это везде так работает для туплов, argMax не понимает что там что-то этакое.
-
Видимо да, default, подскажите как поменять, в документации не нашёл
-
Обновлюсь, дам обратную связь
-
-
Подскажите, возможно ли добавить вычисляемую колонку, порядкового номера строки?
-
Строго говоря нет, вам зачем?
-
Спасибо, а почему именно 20.8.18? Это последняя стабильная 20.8.*?
-
всем привет, можно так сравнить Uint64 поле и FixedString(32)
toFixedString(toString(<Uint64>), 32) == <FixedString(32)>
версия клика 20.12.5.14 -
Можно, но почему приводить к FixedString а не к UInt64?
-
незнаю, просто так написал, а лучше наоборот?
-
Ну Int64 это 8 байт, FixedString это 32 байта.
Сравнить 8 байт быстрее -
точно, спасибо за ответ
-
Хотя вопрос в том, что из этого колонка а что значение
-
это join
-
А, ну тогда приводите все к UInt64 и память сэкономите.
-
спасибо, так и сделаю
-
да
-
а что лежит в FixedString(32) ? число в hex ?
-
я точно не уверен, первый раз сейчас базу эту увидел, но похоже на простое число, десятиричное
-
просто как текст?
-
ага
-
числа "какбы нельзя" сравнивать как строки на < > и даже на = из-за лидирующих 0.
toUInt64OrNull(toString(<FixedString(32))) -
Спасибо за разъяснения.
-
https://github.com/Altinity/clickhouse-operator/blob/master/docs/custom_resource_explained.md#specconfigurationprofiles
kind: ClickhouseInstallation
meta:
name: XXX
spec:
configuration:
profiles:
default/async_socket_for_remote: 0
default/use_hedged_requests: 0clickhouse-operator/custom_resource_explained.md at master · Altinity/clickhouse-operatorThe ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes - clickhouse-operator/custom_resource_explained.md at master · Altinity/clickhouse-operator
-
совместима
обновляться можно
в releases есть подробности что изменилось
изменения в основном направлены на улучшение скорости принятия в систему новых изменений чтобы не ждать пока старые reconciling cycles закончатся -
Я имел в виду как поменять пользователя, из-под которого ходит оператор, а не как добавить профиль дефолтному пользователю
-
The ClusterRoleBinding "clickhouse-operator-clickhouse-operator" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"ClusterRole", Name:"clickhouse-operator-clickhouse-operator"}: cannot change roleRef
Видимо всё-таки нужно сначала что-то удалить -
Это я применяю https://github.com/Altinity/clickhouse-operator/blob/0.14.0/deploy/operator/clickhouse-operator-install-template.yaml поверх https://github.com/Altinity/clickhouse-operator/blob/0.13.5/deploy/operator/clickhouse-operator-install-template.yamlclickhouse-operator/clickhouse-operator-install-template.yaml at 0.14.0 · Altinity/clickhouse-operator
The ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes - clickhouse-operator/clickhouse-operator-install-template.yaml at 0.14.0 · Altinity/clickhouse-ope...
-
kubectl get configmap --all-namespaces | grep clickhouse-operator
вам надо отредактировать
etc-clickhouse-operator-files
там chUser и chPassword
их можно в секреты загнать еще
chCredentialsSecretNamespace: "" ││ chCredentialsSecretName: ""
но вообще async Лучше именно для всех профилей отключить и посмотреть будут ли снова возникать ошибки с сокетами -
а вас не затруднит сделать issue на github?
-
привет, импортирую данные из файла примерно вот таким образом clickhouse-client --query "INSERT INTO table FORMAT JSONEachRow" --max_insert_block_size=100000 < file - ошибок нет, но и данные в таблице не появляются; если взять небольшое подмножетсво строк из файла - все работает
-
-
Ваш коллега подсказал обновить версию Кликхауса, сначала это попробую, потом, если не поможет, применю настройки
-
там делалось органичение по security правам для роли clickhouse operator
чтобы меньше прав было...
скорее всего можно попробовать
kubectl delete ClusterRoleBinding "clickhouse-operator-clickhouse-operator" -n clickhouse-operator
а потом apply -
Can't update Operator 0.13.5 to 0.14.0 · Issue #684 · Altinity/clickhouse-operator
We have the running operator created by applying https://github.com/Altinity/clickhouse-operator/blob/0.13.5/deploy/operator/clickhouse-operator-install-template.yaml. After apply https://github.co...
-
Похоже сработало, добавил коммент в issue
-
Кстати на счет Altinity/clickhouse-operator.
Мы тут обратили внимание, что он при каждом обновлении переписывает label'ы у подключенных к кх-кластеру PersistentVolume значениями из ClickHouseInstallation, хотя самими объектами PersistentVolume управляет другой оператор которому это может что-то подломать. При этом label'ы у PersistentVolumeClaim после создания уже не обновляются, хотя PersistentVolumeClaim создает как раз clickhouse-operator.
Это точно правильное поведение? -
Оператор генерит PVC из volumeClaimTemplate + StatefullSet
в которых выставляет Label
а уже ниже их тащит
в 0.14.0
добавилась опция
https://github.com/Altinity/clickhouse-operator/releases/tag/0.14.0
excludeFromPropagationLabelsRelease release-0.14.0 · Altinity/clickhouse-operatorNew features: Operator reconciles CHI with the actual state of objects in k8s. In previous releases it compared new CHI and old CHI, but not with k8s state. The current reconcile cycle can be inte...
-
Т.е. в excludeFromPropagationLabels можно перечислить label'ы, которые мы бы не хотели копировать в PV?
-
А про PVC вопрос только в том, почему для них не работает labels propogation. Создаются они правильно, но если у ClickHouseInstallation меняются label'ы, то на PVC это никак не отражается.
-
Если, конечно, это тоже не исправили в последней версии.
-
Версия КХ ?
/var/log/clickhouse-server/clickhouse-server.err.log -
-
-
-
-
-
Обновление не помогло:
2021.04.26 16:09:09.582017 [ 561 ] {} <Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 107, e.displayText() = Net Exception: Socket is not connected, Stack trace (when copying this message, always include the lines below):
0. Poco::Net::SocketImpl::error(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x125aeaae in /usr/bin/clickhouse
1. Poco::Net::SocketImpl::peerAddress() @ 0x125b0d26 in /usr/bin/clickhouse
2. DB::HTTPServerRequest::HTTPServerRequest(DB::Context const&, DB::HTTPServerResponse&, Poco::Net::HTTPServerSession&) @ 0xff05b84 in /usr/bin/clickhouse
3. DB::HTTPServerConnection::run() @ 0xff049f4 in /usr/bin/clickhouse
4. Poco::Net::TCPServerConnection::start() @ 0x125b5b0f in /usr/bin/clickhouse
5. Poco::Net::TCPServerDispatcher::run() @ 0x125b7521 in /usr/bin/clickhouse
6. Poco::PooledThread::run() @ 0x126edc49 in /usr/bin/clickhouse
7. ? @ 0x126e9aaa in /usr/bin/clickhouse
8. start_thread @ 0x9609 in /lib/libpthread.so.0
9. __clone @ 0x122293 in /lib/libc.so.6
(version 21.4.5.46 (official build)) -
Эта кофигурация применилась, но ошибка всё равно появляется
-
>Имеем кластер Кликхауса в Кубернетесе, управляемый Алтинити оператором, в кластере 16 шардов по 2 реплики. Данные >вставляются ежесекундно по несколько тысяч записей в Distributed таблицу, на шард приходится около тысячи строк за >вставку. Иногда (раз в несколько секунд на одной из реплик, всегда разные реплики) получаем ошибку
ошибку инсерт возвращает? JDBC драйвер? -
Ошибка падает в логи реплики, запрос через http возвращает успех
-
а так эта ошибка вообще как-то связана с вашим приложением?
выше уже писали что это возможно балансер делает probe. -
Напрямую не связана, но я не знаю что это за ошибка, может данные теряются какие. Балансер какой? Может его можно как-то сконфигурировать? Я правильно понял, что во время вставки реплика не отвечает на какой то внутренний пинг, и это генерирует такую ошибку?
-
да я не про КХ.
У вас КХ где запущены? В облаках или on-premises ? -
Нет
приходит коннект входящий на HTTP
дальше его пытаются обработать
DB::HTTPServerRequest::HTTPServerRequest
но сокет разравает соединение -
-
ну вот сегодня только баг с distributed + window функциями закрыли...
если необходимость есть, пользуйтесь но на последних релизах только
и проверяйте результаты -
сейчас оно неправильно работает с distributed запросами.
rank можно через массивы считать, это даже в разы быстрее чем wf -
да, я пробовал через массивы, но получается медленно, из-за того, что надо все пихать в массив
-
КХ поднят в GKE оператором, рядом поднято приложение, которое вставляет данные через HTTP запросы. Все запросы завершаются статусом 200. Но в логах реплик попадается такая ошибка. Далеко не каждый запрос, но раз в минуту на одной из реплик точно появляется.
-
Т.е wf будет еще медленнее, чем массивы? Это странно
-
в моих тестах wf сильно медленнее чем массивы.
-
почему странно? По моему как раз наоборот, это ожидаемо
-
аа это точно тогда: либо dns сервер, либо App. load balancer
не обращайте внимания -
Если на это можно не обращать внимания, может это не ошибка и нужно понизить уровень? А если это всё так ошибка, может её можно исправить? Логи завалены этими ошибками, ещё и стек длинный, как среди них искать реальные ошибки, они могут затеряться.
В качестве балансировщика используется Kubernetes service, который создаётся оператором. Других балансировщиков или каких-то проб нет, приложение этим не занимается. -
Ну мои аргументы будут наверное такие себе, потому что я не знаю как под капотом это все работает, но сделать ранк в постгре очень быстро, а в кликхаусе через массивы очень медленно. Получается я ожидал в кх той же скорости для ранк и даже быстрее. Мои ожидания - мои проблемы)
-
OK. Kubernetes service. А дальше что? Приложение тоже в кубах и ходит используя k8s сервис?
-
Верно, приложение тоже в кубах, ходит через имя сервиса
-
-
GRANT | ClickHouse Documentation
GRANT Statement Grants privileges to ClickHouse user accounts or roles. Assigns roles to user accounts or to the other r
-
Обращаю внимание, что ошибка появляется только когда приложение вставляет данные. Если прекратить вставку, ошибок нет.
-
Благодарю
-
приложение через JDBC ?
-
-
Через http
-
это нормально... partition pruning не так работает.
попробуйте в условном оракле, будет то же самое... -
Эх. Спасибо. Значит сделаю ограничение по MyTime дополнительное, тогда уж должно подрезать, как я полагаю
-
-
Ребят, а кто нибудь сталкивался с потерей данных в ch при no space left? Известная проблема? в какой то момент времени закончилось место, все insert ретраились и часть из них выполнилась без ошибок с 100℅ диском, конечно, никакие данные не записались
-
Как будто ch отметил их в zk и сработала дедубликация
-
Но черт, данные то не записались) стоит обычный replicated merge tree, даже для надежности делал insert quorum
-
2
-
а в индексе есть MyDateTime ?
SELECT MyDateTime FROM MyTable WHERE smth=99
order by MyDateTime desc limit 1
или:
SELECT MyDateTime FROM MyTable WHERE smth=99
order by smth desc, MyDateTime desc limit 1 -
В Индексе MyDateTime далеко не на первом месте, поэтому не поможет
PARTITION BY toYYYYMMDD(MyDateTime) ORDER BY (UserID, smth, MyDateTime)
Так как в большинстве запросов нужно выбрать диапазон времени через партиции, а уж дальше искать по UserID и остальному -
ну так поставили бы MyDataTime на первое место. не вижу проблемы
-
т.е если даже время присутствует в индексе, например, на 2 или 3 месте, условие, например в prewhere date_time between разве не поможет отсечь ненужные данные? Вернее отработает не так, как предполагается.
-
Ну так поиск по UserID в рамках конкретного партишена-дня будет быстрее если и в order-ключе он на первом месте, разве нет?
-
быстрее из за того что они в грануле рядом, ну так вы все равно все результаты читаете из range по времени...
1 очень медленный 1 быстрый
против двух типа быстрых... -
вторым в смысле?
ORDER BY (UserID, MyDateTime, smth)
ну и можно MyDateTime загрубить до часа попробовать
ORDER BY (toStartOfHour(MyDateTime), UserID, smth, MyDateTime) -
ORDER BY (toStartOfHour(MyDateTime), UserID, smth, MyDateTime)
так имелось ввиду... и фильтровало бы норм -
-
-
-
-
не работает и не будет работать.
сейчас в КХ уже имплементирован собственный аналог, называется nukeeper (экспериментальный) -
ха, уже просто keeper, он эмулирует zookeeper
https://github.com/ClickHouse/ClickHouse/tree/master/tests/integration/test_keeper_back_to_back/configs -
-
Кто-нибудь уже использует на проде?
-
Подскажите плиз, как посчитать сумму по массиву cum_summ?
sumArray(cum_summ) - это не работает, выдает ошибку:
Illegal type Array(UInt8) of argument for aggregate function sum -
-
прочитать доку и заметить что sumArray(arr) - просуммировать все элементы всех массивов arr, и что в твоем случае нужна arraySum
-
Сорри, разобрался)))
-
нет. Оно еще не готово и официально не релизнулось, неофициально оно уже есть в 21.4 кажется
- 27 April 2021 (172 messages)
-
Ребят, подбираю модель хранения данных. Пробую разные варианты. Вопрос возник. Возможно ли?
Есть таблица
create table ireadings (
dt datetime not null,
val Int64 not null,
meter_id Int64 not null,
reading_type_id Int8 not null,
usage_point_id Int8 not null,
data_channel_id Int64 not null,
data_channel_spec_id Int16 not null,
vee_state_id Int8 not null
)
engine = ReplacingMergeTree()
partition by toYYYYMM(dt)
order by (vee_state_id, reading_type_id, dt, meter_id);
Хочу страшного. Хочу MW где данные будут такой структуры:
dt datetime not null,
val Array(Int64) not null,
meter_id Int64 not null,
reading_type_id Int8 not null,
usage_point_id Int8 not null,
data_channel_id Int64 not null,
data_channel_spec_id Int16 not null,
vee_state_id Array(Int8) not null
и При появлении в исходной таблице записи с существующим vee_state_id, reading_type_id, dt, meter_id, в MW обновляется запись при этом в колонках-массивах val и vee_state_id добавляются элементы из записи ireadings -
сначала сюда https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597
https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf
потом сюда https://gist.github.com/den-crane/048ce66bc59f5577d56e42d76934682e -
Всем привет! А как в ClickHouse эффективнее всего работать с комбинацией enum? К примеру, есть поле описывающее категорию события. Каждое событие (каждая строка таблицы) может иметь одну или несколько категорий. Таблица широкая, >500 колонок. В ней 5 колонок которые хотелось бы видеть как комбинацию enum. Эти колонки будут участвовать в запросах, так что по ним нужны и индексы. Пока не понял что эффективнее взять - LowCardinality, набор bool колонок, array. В планах самому измерить, но наверняка кто-то сталкивался.
-
в чем то LowCardinality это и есть enum просто свой словарь на каждый data part
массивы нет смысла брать если вы не знаете зачем конкретно они вам нужны -
-
насчет "индексы должны быть"
если поле low cardinality
и действительно кардинальность низкая
время есть какое то в таблице? -
Привет!
Подскажите, пожалуйста. Есть большие таблицы в которые идёт запись и которые нужно расшардить. INSERT INTO .. SELECT в Distributed таблицу занимает много времени. Есть какой-то другой вариант (без длительного downtime)? Можно, например, сделать INSERT SELECT при включеной базе, потом остановить базу и дозалить инкременты? -
Да, время есть, это временной ряд по сути
-
Кажется проще всего поднять рядом шардированный кластер, переключить запись туда и долить старые данные через insert... select
-
ну тогда стандартный совет
PARTITION BY toYYYYMM(datetime_field)
PRIMARY KEY datetime_field, несколько_полей_по_степени_увеличения_кардинальности_значений
все поля измерений строковые засовывать LowCardinality(String)
высоко кардинальные поля типа UUID лучше менять на что нибудь типа snowflakeid или sonyflakeid -
-
+1 я бы сначала начал новые данные в новую схему лить
и старые перелил бы отдельно
вместо DISTRIBUTED
можно наверное INSERT INTO ReplicatedMergeTree ... SELECT FROM remote(, mergetree_table) WHERE ... -
еще тут можно посмотреть
https://kb.altinity.com/altinity-kb-schema-design/best-schema-for-storing-many-metrics-registered-from-the-single-source -
-
ну по поводу "одного большого JSON"
есть вот такая статья
https://eng.uber.com/logging/Fast and Reliable Schema-Agnostic Log Analytics PlatformAt Uber, we provide a centralized, reliable, and interactive logging platform that empowers engineers to work quickly and confidently at scale. The logs are tag
-
Спасибо за совет!
-
И Вам спасибо!
-
Привет. Насколько рациональным будет подход с использованием CH MV + Kafka для data processing вместо Spark, если типичные задачи для Spark — это агрегации? То есть прилетели данные в CH из кафки, MV тригернулось, данные доагрегировались, CH отправил эти агрегаты в другой топик Кафки...
Ногами сильно не пинайте, просто размышляю. -
Всем привет!
Возник вопрос при работе с SQL доступами пользователей.
Можно ли указать последовательность применения прав на объекты?
Пример
GRANT role1 TO role;
GRANT ON CLUSTER '{cluster}' SELECT ON *.* TO role;
REVOKE ON CLUSTER '{cluster}' SELECT ON database.* FROM role;
GRANT ON CLUSTER '{cluster}' SELECT ON database.table1 TO role;
GRANT ON CLUSTER '{cluster}' SELECT ON database.table2 TO role;
REVOKE ON CLUSTER '{cluster}' SELECT ON database2.table1 FROM role;
REVOKE ON CLUSTER '{cluster}' SELECT ON database2.table2 FROM role;
Однако
show grants и в файле пользователя в каталоге access
следующий вывод
ATTACH REVOKE SELECT ON database2.table1 FROM role;
ATTACH REVOKE SELECT ON database2.table2 FROM role;
ATTACH SELECT ON *.* TO role;
ATTACH GRANT SELECT ON database.table1 TO role;
ATTACH GRANT SELECT ON database.table1 TO role;
ATTACH REVOKE SELECT ON database.* FROM role;
ATTACH GRANT ID('66477b08-76e1-bad8-685f-ba664077ff8b') TO role;
Это противоречит цели выдачи прав.
Если подправить файл в ручную, расставив в правильном порядке и перезагрузив сервер - права становятся правильными
Однако, если выполнить команду по выдаче прав, то опять все возвращается.
Хотелось бы понять, возможно ли как-то добиться правильной последовательности применения прав. -
Привет, подскажите если ли смысл вешать на массивы индекс? Как он будет работать?
-
-
похоже на баг в сериализации в SQL для RBAC
заведите issue на github -
ok. Спасибо
-
как все data skip indexes
при вычитке партов, если есть оператор с полем который ускоряется индексом, то будет прочитана гранула индекса и определено, можно ли отбросить текущий парт для вычитки
arrayX функции оно не ускоряет -
-
За Спарк не скажу. Кафка и mv работают прекрасно
-
Можете привести примеры, для каких конкретно случаев? Возвращаете ли вы назад в Кафку результат работы MV?
-
Ну приходит миллиард транзакций день условно
На таблицу повесили mv нужные для 5 агрегаций разных, например
Я думаю, что можно повесить на эти таблицы с агрегациями другие mv, которые уже будут продюсить в кафку -
Можно но проблема в том, что если вставка в кафку поломается по какой то причине то весь пайплайн из MV встанет
-
hibernate он поверх JDBC же работает
а что конкретно не получилось? -
а что за кейс такой? 😳
-
Денис спасибо большое! Ваш доклад я смотрел только вчера. Спасибо за доп материалы. Если бы вас (Altinity) не существовало, не знаю как бы мы выживали!
-
Добрый день. Был ошибочный запрос Insert, который упал с ошибкой
<Error> TCPHandler: Code: 252, e.displayText() = DB::Exception: Too many partitions for single INSERT block (more than 100).
Теперь в логах видно, что этот процесс постоянно повторяется. Можно ли как-то остановить эту background задачу без увеличения лимита? В логах не могу найти упоминание про какой-либо .bin файл =( -
Thx :)
-
у вас один сервер или несколько?
процесс сам по себе повторяться не может, либо клиент инициализирует процесс заново
либо какой то из серверов
у вас вставка в Distributed таблицу? -
несколько серверов. Вставка в distibuted таблицу)
-
-
тогда скорее всего в DISTRIBUTED таблице отсутсвует PARTITION BY
а в дочерних таблицах они есть
и у вас проблема со структурой данных прежде всего
и при вставке в дочерние таблицы видимо .bin пытается разбиться на кучу маленьких .bin
за какой период вставляете данные?
по какому признаку делаете PARTITION BY в MergeTree Таблицах которые под distirbuted живут?
ищите на серверах /var/lib/clickhouse/data/db/distributed_table_name/**.bin файлы
смотрите логи
удаляйте
разбивайте по другому данные на клиенте до того как вставить в distributed -
Всем привет.
Подскажите, пожалуйста, сталкивался ли кто-либо со сложностями при обновлении Debian (Jessie -> Stretch -> Buster), на котором работает clickhouse.
Ситуация такая: есть 2 хоста с Debian 8 и Clickhouse 19.11.3.11. У них один шард на двоих. Пишут в distributed таблицу.
Обновлять сам clickhouse сейчас задачи нет, пока что только Debian. Но вот возникают сомнения, не сломает ли обновление Debian на одном из хостов, что-то на другом 🙂 -
Дык в докер загони клик и вероятность того, что всё накроется при апдейте будет минимизирована. Ибо такой апдейтище сам по себе выглядит крайне стрёмным...
-
Спасибо, про DISTRIBUTED я посмотрю, возможно это поможет. PARTITION BY toYYYYMMDD(created_at). Но так получилось, что вставлялось 1000 записей с большим разбросом по разным дням. Поэтому и получилась такая проблема.
-
Нет, не сломает. Если версия КХ одинаковая, то все должно быть ОК. Мы недавно обновлялись Jessie -> Buster в кластере из 4х нод (2 шарда, 2 реплики) по одной ноде, без проблем.
-
тогда это единичный случай, и можно найти тот самый .bin который не может раскидаться по дням в distributed таблице
если знаете на какую ноду вставляли то будет легче -
Спасибо!
Будем пробовать 🙂 -
clickhouse-server это статический бинарник практически без зависимостей от libc и ядра
так что сломаться не должно
только в очень каких нибудь экзотических случаях -
👍 спасибо!
-
-
-
-
ошибка в конфиге
grep -e "logger|errorlog" -r /etc/clickhouse-server/ -
-
-
=) хм... а точно не менялась?
ls -la /var/lib/clickhouse-server/preprocessed_configs/
какие тут даты модификации? -
-
-
-
а можно логи отсортировать по возрастанию времени?
-
-
-
дак надо сначала определиться какая ошибка была ДО shutdown
окно по логам расширьте и на pastebin куда нибудь выложите с сортировкой по возрастанию -
привет ! можно ли таблицу типа Join сделать реплицируемой ?
-
Так а нет ошибок
-
-
-
-
это точно не все что есть в логах
и было бы не плохо логи все таки глазами в правильном порядке посмотреть -
нет
Engine менять не нужно
а вот если будете новую реплику добавлять, то желательно чтобы с другим именем и макросом {replica} в <macros> было
для distributed таблиц
надо из remote_host убрать реплику
оно без рестарта должно подхватиться
ну и быть уверенным что в distributed во временных .bin для шарда нет ничего... -
большое спасибо за информацию, а как удостовериться в последнем пункте?
-
SELECT hostName(), * FROM clusterAllReplicas('your-cluster-name-from-system.clusters',system.metrics) WHERE metric='DistributedFilesToInsert' FORMAT Vertical;
желательно по нулям чтобы было
ну и приостановить вставку если можно пока не рассасется -
спасибо
-
не забудьте удалить все реплицированные таблицы с сервера
drop database … -
-
Просмотрел глазами. Просто пустоста. Простыня из успешных квериков а потом ошибка
-
-
-
Добрый день.
Можно ли получить max значение с группировкой по другому полю? Хочу избавится от подзапроса.
SELECT datevalue, max(ts)
FROM dbo.svn_min_levels
WHERE datevalue BETWEEN ${dt_start} AND ${dt_end}
GROUP BY datevalue -
Подскажите пожалуйста, почему так? access_management=1 включил юзеру default, clickhouse-server перезапустил.
-
now() вроде считается один раз за весь query
и ему вроде константа должна быть на вход
а dictGetString это не константа -
-
argMax | ClickHouse Documentation
argMax Calculates the arg value for a maximum val value. If there are several different values of arg for maximum values
-
Я рассматривал её, но мне нужно максимальное значение для director, manager ... если бы у него было несколько зарплат
-
По datevalue BETWEEN .. задается условие а работается с максимальными значениями из другого поля
-
а можно пример таблицы и то что нужно в результате?
-
Уважаемые коллеги!
Столкнулся с kernel panic при использовании таблиц KafkaEngine в Clickhouse: насколько я понял, ошибка в оперативной памяти процесса, обрабатывающего background-процессы (BUG: Bad page state in process BgSchPool pfn:1fcdb35).
Сталкивался ли кто нибудь с таким? Есть мысли куда копать?
Описение конфигурации и лог ошибок ниже:
Кластер серверов clickhouse из 3 реплик.
Кластер брокеров kafka из 3 реплик.
По отдельному кластеру zookeeper из 3 реплик для clickhouse и kafka.
На каждом из серверов clickhouse по 30 таблиц с движком Kafka + MatView в Replicated target-таблицы.
Изменен background_schedule_pool_size=50.
ClickHouse server version 20.8.6 revision 54438
<pre>2019.04.18 07:44:29.917382 [ 27 ] {} <Warning> dbname.tablename_sharded (ReplicatedMergeTreePartCheckThread): We have part 20190417_20190417_539039_540909_120 covering part 20190418_20190418_539738_539738_0
2019.04.18 07:44:29.941543 [ 7 ] {} <Error> dbname.tablename_sharded (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 235, e.displayText() = DB::Exception: Part 20190417_20190417_539039_540909_120 (state Committed) already exists.5200172.356694] BUG: Bad page state in process BgSchPool pfn:1fcdb35</pre> -
Подскажите пожалуйста как поменять в таблице поля по которым нужно суммировать?
engine = SummingMergeTree()
ORDER BY (hour, id, otherId) -
как поменять
-
ORDER BY сменить
-
как поменять
-
Вот полный запрос
SELECT ....
FROM dbo.svn_min_levels
WHERE (datevalue, ts) IN
(
SELECT datevalue, max(ts)
FROM dbo.svn_min_levels
WHERE datevalue BETWEEN ${dt_start} AND ${dt_end}
AND filialid = ${filial_id}
GROUP BY datevalue
)
AND filialid = ${filial_id}
ORDER BY date_value -
Если поменять ORDER BY (а не добавить новые столбцы в конец) то только пересозданием и переливом таблицы
-
CREATE TABLE salary
(
user String,
salary Int32
)
ENGINE = MergeTree()
ORDER BY (user)
SETTINGS index_granularity = 8192;
INSERT INTO salary (user, salary)
VALUES ('director', 1000), ('director', 1001), ('director', 1002),
('manager', 100), ('manager', 102),
('worker', 10), ('worker', 12), ('worker', 14);
SELECT argMax((user, salary), salary) as r
FROM salary
GROUP BY user;
результат:
'(''worker'',14)'
'(''director'',1002)'
'(''manager'',102)' -
с какого именно сервера?
-
который хотите выкинуть
-
Добрый день! Уважаемое сообщество. Ищем сильного .net специалиста на ETL, который хочет работать с кликхаусом и большими данными. Проект - ML + analytics под продуктовый ритейл. Детали по ссылке - https://docs.google.com/document/d/1I6VzBcNtft6MGAl6lf5rrZH7D6jDa4gMyJW90swNFfA/edit?usp=sharingC#_.Net_developer_ETL_NEW
OSA Hybrid Platform, a company with offices in Kiev, Moscow and California, USA helps big retailers and FMCG to improve OSA (on shelf availability). https://osahp.com Vacancy of Senior С#/.Net Engineer, ETL Project Description: Our product is focused on AI in retail and it includes: Analyt...
-
ок, спасибо)
-
Получается тоже самое как у меня. Приходится делать условие по одному полю а связь по max(ts) = ts
-
увы
toDateTime(, таймзона все равно константная должна быть) -
сделайте toUInt32(dateTime_Field) AS timestamp, getDictString() AS tz
и на клиенте потом просто преобразовывайте -
господа, есть кто может за оплату помочь перенести clickhouse базу с одного сервера на другой?
-
clickhouse-backup сумеет бесплатно. Ну либо руками перенести data
-
экспорт руками я уже сделал) осталось разобраться как сделать восстановление
-
Пишут, что может помочь настройка optimize_move_to_prewhere = 0, прописываю её в settings для конкретного запроса, она не применяется, та же ошибка — expected const String, got String
-
=) да вроде move_to_prewhere вообще не про это, это про переписывание WHERE и прокидывание в PREWHERE для того чтобы выборку ускорить -)
к параметрам функций это отношения не должно быть -
-
можно было без экспорта
INSERT INTO ... SELECT ... FROM remote()
https://clickhouse.tech/docs/en/sql-reference/table-functions/remote/remote | ClickHouse Documentationremote, remoteSecure Allows to access remote servers without creating a Distributed table. remoteSecure - same as remote
-
-
Спасибо! Буду тогда на клиенте обрабатывать)
-
Здравствуйте, обновился с 20.4 до 21.3, одна из таблиц MergeTree была партицирована по такому выражению:
(ceil(fileId / 1000) % 1000). fileId - UInt64. Теперь кликхаус ругается, что нельзя использовать float point as partition key. Соответственно вопрос , это баг или фича? ведь toTypeName((ceil(fileId / 1000) % 1000)) возвращает Int16. Вот пул-реквест, который реализует эту проверку https://github.com/ClickHouse/ClickHouse/pull/18464Disallow floating point as partition key by hexiaoting · Pull Request #18464 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
Пытаюсь восстановить базу по инструкции
https://altinity.com/blog/introduction-to-clickhouse-backups-and-clickhouse-backup
echo 'alter table events attach partition 202006' | clickhouse-client
Подскажите что означает partition 202006?Introduction to ClickHouse Backups and clickhouse-backupThis article will explore the plumbing involved in backing up ClickHouse and introduce the clickhouse-backup tool for automating the process.
-
PARTITION | Документация ClickHouse
Манипуляции с партициями и кусками Для работы с партициями доступны следующие операции: DETACH PARTITION — перенести пар
-
скорее баг
можно через XML поменть, но нужен перезапуск сервера
<megre_tree_settings>
<allow_floating_point_partition_key>1</allow_floating_point_partition_key>
</merge_tree_settings> -
да, я в курсе про эту настройку, просто выглядит как костыль, ведь и так должно работать
-
PARTITION это логическая часть которая в *MergeTree таблицах в PARTITION BY объявлена
позволяет разбить таблицу на крупные части (отдельные каталоги)
и в запросах быстро определяется какие партиции задействованы и из них паралельно данные можно вычитывать... -
выглядит как баг, заводите issue и делайте ссылку на pull request
-
если у меня таблица создается так:
ENGINE = MergeTree() PARTITION BY toYear(createdAt)
что мне надо писать в импорте? -
имя партции равно значению выражения PARTITION BY
так что
2020
или
2021
или за какой вы там период восстанавливаете -
а если я сделал дамп всей базы, и там данные за 2020 и 2021 тогда что делать? экспортировать/импортировать кусками ?
-
Ребят, всем привет!
Кто-то сталкивался с проблемой подключения CH к tableau desktop на mac os Catalina? Вычитал, что надо самому как-то конфигурировать odbc-драйвер. Но рабочего гайда так и не нашел.
Может у кого-то есть готовый драйвер, или может наставить на путь истинный? -
ну если вы все по инструкции делали и правильно поняли инструкцию то у на шаге ATTACH есть
/var/lib/clickhouse/data/<database>/<table>/detached/2020
и
/var/lib/clickhouse/data/<database>/<table>/detached/2021
можно сделать что нибудь типа однострочника bash
for partition in /var/lib/clickhouse/data/<database>/<table>/detached/*; do clickhouse-client --echo -q 'alert table <db>.<table> attach partition $partition'; done -
Releases · ClickHouse/clickhouse-odbc
ODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
-
и читаем внимательно инструкции
https://github.com/ClickHouse/clickhouse-odbc/blob/master/README.mdclickhouse-odbc/README.md at master · ClickHouse/clickhouse-odbcODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
Altinity.Cloud
Altinity.Cloud is a fully-managed AWS and Google Cloud ClickHouse Service developed and operated by Altinity enterprise experts. Launch production-ready ClickHouse clusters today!
-
-
huawei например
https://support.huaweicloud.com/intl/en-us/bestpractice-cce/cce_bestpractice_0128.htmlDeploying ClickHouse Operator_Cloud Container Engine_Best Practices_Batch Computing_Deploying ClickHouse on CCE_HUAWEI CLOUDkubectl apply -f https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/deploy/operator/clickhouse-operator-install.yamlAfter a period of time, check the r
-
почему так все сложно, почему нельзя сделать mysqldump, а потом mysql < file.sql 😭
-
серверов то у вас 3 штуки?
ну если вам шардинг нужен а не резервирование, то да -
Именно шардинг инетересует
-
-
удачи вам сделать mysqldump на таблице размером с терабайт =)
там в статье на которую вы ссылаетесь есть утилита. clickhouse-backup
которая делает то что описано в статье, только сама -
да нету у меня терабайта) скромные 350 метров
-
переделал вчерашние данные, вместо партиционирования toYYYYMM(DT) сделал (Name,DT), объем данных вырос на ~15%, запросы стали быстрее ~в 5 раз
-
некоторые на порядок
-
ищу как померять дисковые io в запросах
-
а какой у вас вообще опыт с k8s ?
и какой именно у вас k8s ?
в целом наличие clickhouse-operator многие подводные камни скрывает
но 100% всех специфичных кейсов не покрывает, хотя оператор у нас может дейсвительно многое и очень гибкий -
Опыт в пару лет в продакшн имеется. Траблшутить тоже умеем. K8s managed в клауде возможно bare metal будет
-
Потрогаем, можно будет сюда за консультациями обращаться?
-
-
дак сделайте
clickhouse-client -q "SELECT create_table_query FROM remote(..., system.tables) WHERE database='XXX' AND table='YYY'" > YYY.sql
cat YYY.sql > clickhouse-client --echo
clickhouse-client --progress -q "INSERT INTO XXX.YYYY SELECT * FROM remote(... , XXX.YYY)"
почитайте доку про remote
https://clickhouse.tech/docs/en/sql-reference/table-functions/remote/remote | ClickHouse Documentationremote, remoteSecure Allows to access remote servers without creating a Distributed table. remoteSecure - same as remote
-
обращайтесь
можно сразу на github issues делать, их читают -
-
Разве не консюмер настраивает для себя эксчейндж?
-
-
в кролике там вроде эксчендж описывается и продьюсером и консьюмером
-
ну и КХ же консьмер и есть
-
Exchange по дефолту durable
-
ну проблема в том, что есть не durable эксчендж
и туда нужно прицепить КХ
и как бы оно не стартует ясно почему -
тогда тащите
для AWS могу сказать что Zookeeper лучше на gp3 дисках разместить
а clickhouse можно на gp2 оставить, но и gp3 тоже норм будет
для base metal можно посоветовать https://github.com/minio/direct-csi в качестве CSI
лучше сохранять принцип для продакшена один StatefulSet с clickhouse = 1 k8s node
ну или уметь правильно задавать Limits \ Requests по CPU \ RAMGitHub - minio/direct-csi: Container Storage Interface (CSI) driver for direct attached storageContainer Storage Interface (CSI) driver for direct attached storage - GitHub - minio/direct-csi: Container Storage Interface (CSI) driver for direct attached storage
-
;)) ну поплачете, потом перестанете, все через это проходят
а может предыдущий опыт поможет и все будет хорошо наоборот -
Потому что не реализовано, чтобы можно было использовать user-defined exchange, сейчас подразумевается что им полностью владеет сама таблица (создаёт / удаляет )
-
охтыж
ну те походу перекладыватель нужно писать -
-
Ну можно реализовать, несложно совсем
-
-
$ clickhouse-client -q "SELECT create_table_query FROM remote('ipaddr:9000', system.tables, 'user', 'password') WHERE database='tableName' AND table='Stats'" > stats.sql
Code: 194. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Password required for user default.
что ему не нравится? (( -
-
-
вот так clickhouse-client -u —password с этим же паролем я могу зайти
-
-
теперь так ругается,
Code: 10. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Not found column comment_expression in block. There are only columns: name, type, default_type, default_expression, comment, codec_expression, ttl_expression.
что это может означать ? -
ребят, готов заплатить 1000 российских рублей кто поможет перенести с одного сервера на другой 1 таблицу, размером ~350мб. Помогите пожалуйста, я устал в этом копаться :( кто готов помочь, напишите в личку пожалуйста. Спасибо.
-
Так а в чем проблема зайти на clickhouse1, выполнить show create table Stats, скопировать
Зайти на clickhouse2 создать таблицу Stats
выполнить insert into clickhouse2.Stats select * from remote('clickhouse1', 'db', 'table', 'user', 'password')
? -
-
Сделайте простой INSERT SELECT
-
всем привет. Подскажите, пожалуйста, когда по времени должна выполниться очистка диска после выполнения команды alter table ... drop partition ...? Партиции я вижу, что были удалены уже больше 1 часа назад, а в system.disks изменения не видно и в system.tables тоже
-
вопрос решен, проблема была в том что на серверах стояли разные версии clickhouse (18 и 20)
-
Вот, 1к съэкономил) и опыт получил
-
не совсем)
-
сразу должны удалится, моментально. (есть хитрость что неактивные парты через 8 минут удалятся).
и если эта партиция была забекаплена (alter table freeze), то бекап не удалится понятное дело, и место не осводится.
и если неправильно написать имя партиции в drop partition то молча ничего не дропнется -
понял, большое спасибо за информацию
-
Доброго дня!
после обновления
`
SELECT
'cnt',
formatDateTime(timestamp, '%m/%d %H:%M') AS ts,
replaceRegexpAll(hostname, '.home.net', ''),
severity,
tag,
message
FROM syslog
WHERE (timestamp >= toDate('2021-03-14')) AND (hostname = 'host21.home.net') AND (message LIKE '%Mar 14 17:47:34.003%')
ORDER BY timestamp ASC
LIMIT 1
Progress: 1.41 billion rows, 201.80 GB (34.14 million rows/s., 4.88 GB/s.)
0 rows in set. Elapsed: 41.391 sec. Processed 1.41 billion rows, 201.80 GB (34.11 million rows/s., 4.88 GB/s.)
Received exception from server (version 21.4.5):
Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (total) exceeded: would use 28.34 GiB (attempt to allocate chunk of 4271277 bytes), maximum: 28.28 GiB: (avg_value_size_hint = 257.16845703125, avg_chars_size = 299.0021484375, limit = 8192): (while reading column message): (while reading from part /dbs/clickhouse/data/default/syslog/202104_296585563_316221151_2468/ from mark 14868 with max_rows_to_read = 8192): While executing MergeTree.
` -
памяти сколько? 32?
и раньше хватало или в своп залезал?
какая версия раньше была? - 28 April 2021 (136 messages)
-
Да, 32GB
Раньше не замечал нехватки памяти.
работало на
version 21.2.4.6 (official build)
version 21.3.4.25 (official build)
version 21.4.3.21 (official build) -
Скорее всего тогда случайность, кто-то другой отожрал память в этот момент.
-
Не похоже, что случайность.
Легко воспроизводится...
2021.04.28 01:31:30.012326 [ 4316 ] {44a0e3b6-3d85-46b3-a432-8e7d2e0b9255} <Error> TCPHandler: Code: 241, e.displayText() = DB::Exception: Memory limit (total) exceeded: would use 28.82 GiB (attempt to allocate chunk of 4194400 bytes), maximum: 28.28 GiB: (avg_value_size_hint = 256.3509521484375, avg_chars_size = 298.02114257812497, limit = 8192): (while reading column message): (while reading from part /dbs/clickhouse/data/default/syslog/202103_248874547_268597903_2521_286611038/ from mark 15 with max_rows_to_read = 8192): While executing MergeTree, Stack trace:
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x87f4c4a in /usr/bin/clickhouse
1. DB::Exception::Exception<char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, long&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*&&, char const*&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, long&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) @ 0x8809679 in /usr/bin/clickhouse
2. MemoryTracker::alloc(long) @ 0x8808fed in /usr/bin/clickhouse
3. MemoryTracker::alloc(long) @ 0x8808d54 in /usr/bin/clickhouse
4. MemoryTracker::alloc(long) @ 0x8808d54 in /usr/bin/clickhouse
5. MemoryTracker::alloc(long) @ 0x8808d54 in /usr/bin/clickhouse
6. DB::SerializationString::deserializeBinaryBulk(DB::IColumn&, DB::ReadBuffer&, unsigned long, double) const @ 0xef7fd64 in /usr/bin/clickhouse
7. DB::ISerialization::deserializeBinaryBulkWithMultipleStreams(COW<DB::IColumn>::immutable_ptr<DB::IColumn>&, unsigned long, DB::ISerialization::DeserializeBinaryBulkSettings&, std::__1::shared_ptr<DB::ISerialization::DeserializeBinaryBulkState>&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, COW<DB::IColumn>::immutable_ptr<DB::IColumn>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, COW<DB::IColumn>::immutable_ptr<DB::IColumn> > > >*) const @ 0xef4e435 in /usr/bin/clickhouse
8. DB::MergeTreeReaderWide::readData(DB::NameAndTypePair const&, COW<DB::IColumn>::immutable_ptr<DB::IColumn>&, unsigned long, bool, unsigned long, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, COW<DB::IColumn>::immutable_ptr<DB::IColumn>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, COW<DB::IColumn>::immutable_ptr<DB::IColumn> > > >&) @ 0xfd2ae5e in /usr/bin/clickhouse
9. DB::MergeTreeReaderWide::readRows(unsigned long, bool, unsigned long, std::__1::vector<COW<DB::IColumn>::immutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::immutable_ptr<DB::IColumn> > >&) @ 0xfd29f1b in /usr/bin/clickhouse
10. DB::MergeTreeRangeReader::DelayedStream::finalize(std::__1::vector<COW<DB::IColumn>::immutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::immutable_ptr<DB::IColumn> > >&) @ 0xfd337aa in /usr/bin/clickhouse
11. DB::MergeTreeRangeReader::startReadingChain(unsigned long, std::__1::deque<DB::MarkRange, std::__1::allocator<DB::MarkRange> >&) @ 0xfd382e6 in /usr/bin/clickhouse -
12. DB::MergeTreeRangeReader::read(unsigned long, std::__1::deque<DB::MarkRange, std::__1::allocator<DB::MarkRange> >&) @ 0xfd36b84 in /usr/bin/clickhouse
13. DB::MergeTreeRangeReader::read(unsigned long, std::__1::deque<DB::MarkRange, std::__1::allocator<DB::MarkRange> >&) @ 0xfd36ad3 in /usr/bin/clickhouse
14. DB::MergeTreeBaseSelectProcessor::readFromPartImpl() @ 0xfd302e3 in /usr/bin/clickhouse
15. DB::MergeTreeBaseSelectProcessor::readFromPart() @ 0xfd30fad in /usr/bin/clickhouse
16. DB::MergeTreeBaseSelectProcessor::generate() @ 0xfd2f7db in /usr/bin/clickhouse
17. DB::ISource::tryGenerate() @ 0xff29c85 in /usr/bin/clickhouse
18. DB::ISource::work() @ 0xff2987a in /usr/bin/clickhouse
19. DB::SourceWithProgress::work() @ 0x100daaba in /usr/bin/clickhouse
20. ? @ 0xff62f1d in /usr/bin/clickhouse
21. DB::PipelineExecutor::executeStepImpl(unsigned long, unsigned long, std::__1::atomic<bool>*) @ 0xff5fbd1 in /usr/bin/clickhouse
22. ? @ 0xff64716 in /usr/bin/clickhouse
23. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x8834d2f in /usr/bin/clickhouse
24. ? @ 0x88387c3 in /usr/bin/clickhouse
25. start_thread @ 0x7fa3 in /usr/lib/x86_64-linux-gnu/libpthread-2.28.so
26. __clone @ 0xf94cf in /usr/lib/x86_64-linux-gnu/libc-2.28.so -
После этого база требует рестарта.
-
ну пароль ему нужен для пользователя default
куда можете зайти с паролем? на ipaddr:9000 ?
clickhouse -u user --password=password -h ipaddr работает с машины на которую данные переносите? -
Ребят, всем привет.
Мы пробуем перейти с версии кх 18.6 на последнюю.
В процессе, у нас упало несколько запросов, в которых были JOIN без алиаса, это исправильно одним параметром.
Но потом начали падать запросы с вот такой ошибкой.
2021.04.27 17:00:25.916859 [ 1027 ] {} <Trace> DynamicQueryHandler: Request URI: /?readonly=true
2021.04.27 17:00:25.917107 [ 1027 ] {} <Error> DynamicQueryHandler: Code: 27, e.displayText() = DB::ParsingException: Cannot parse input: expected 'eof' before: 'true', Stack trace (when copying this message, always include the lines below):
Дело в том, что в куске легаси кода был самопальный драйвер для кх, который с каждым запросом слал /?readonly=true. Со старой версией это работало нормально с переходом на новую - все запросы начали падать.
Проблему устранилась, после того как убрали этот параметр. Но может кто-то знает, из-за чего могла возникнуть вообще такая проблема? -
-
Привет. Подскажите пожалуйста. Читал Доку, искал здесь. Вроде не нашёл.
В доке написано, первичный ключ создается при создании таблицы. И если он не указан то значения берутся из сортировки.
Мне необходимо добавить первичный ключ, явно я его не создавал, просто указывал сортировку order by, можно добавить в сортировку колонки, будут ли они добавлены в индекс? -
-
если вы не указывали PRIMARY KEY ваш ORDER BY и есть PRIMARY KEY.
Если вы хотите добавить уже существующие столбцы в индекс, то единственный выход это создание новой таблицы -
Убрали скорее всего для Atomic database engine который by default сейчас
-
Order by на сколько эффективно помогает при выборке по этим столбцам?
-
возможно это связано c этой фичей
https://clickhouse.tech/docs/en/interfaces/http/#predefined_query_handlerHTTP Interface | ClickHouse DocumentationHTTP Interface The HTTP interface lets you use ClickHouse on any platform from any programming language. We use it for w
-
Сильно помогает
Но нужно много думать когда его составляешь, это сильно виляет -
Спасибо
-
так он не блокирует селекты/инсерты? не понял(
-
SELECT engine, name FROM system.databases;
там где Ordinary - блокирует
там где Atomic - не блокирует -
-
@l_dar вы можете добавлять индексы в таблицу без её пересоздания с помощью индексов пропуска, minmax например идентичен order by
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-data_skipping-indexesMergeTree | Документация ClickHouseMergeTree Движок MergeTree, а также другие движки этого семейства (*MergeTree) — это наиболее функциональные движки табл
-
спасибо
-
Он не идентичен ORDER BY в том смысле. что minmax индекс никак не влияет на сортировку данных в таблице. так что на рандомных данных пользы от него будет немного
-
всё так, самая большая разница будет, если в order by нужное поле будет на первом месте. но если в order by уже будет несколько полей, то добавление ещё одного уже мало повлияет на сортировку данных или даже вообще не повлияет, если например последняя колонка - что-то типа uuid, в таком случае можно добавить индекс пропуска без пересоздания таблица. более того в случае с агрегирующими движками это пожалуй единственный выход, потому что первичный ключ может только уменьшать количество поле в индексе.
но в целом да, не идентичны. правильнее было бы выразиться, что minmax идентичен primary key, а не order by -
Всем привет! Подскажите пожалуйста, как правильно обновлять схемы в /var/lib/clickhouse/format_schemas/ ? Допустим, нужно добавить новое поле в существующую схему, как заставить clickhouse перечитать схемы?
-
Всем привет! Подскажите пожалуйста (киньте докой, статьями) возможно ли в КХ настроить запись в одну таблицу с нескольких источников?
Например с нескольких сервисов собирать данные и писать в одну таблицу?
Непонятно что с блокировками, транзакции в КХ не поддерживаются.
Сходу кажется что лучше сделать запись в разные таблицы а потом собрать поверх агрегат. -
если запросов в секунду на запись очень много, то можно использовать таблицу с движком буфер.
-
и то есть если из разных источников идет одновременная запись то она будет происходить последовательно ?
-
если слоёв у буфера несколько, то попадать строки из разных слоёв могут не в порядке попадения этих строк в кликхаус. если слой один, то данные из буфера в таблицы попадают в том же порядке, что и в буфер
https://clickhouse.tech/docs/ru/engines/table-engines/special/buffer/Buffer | Документация ClickHouseBuffer Буферизует записываемые данные в оперативке, периодически сбрасывая их в другую таблицу. При чтении, производится
-
Спасибо!
-
есть data skip indexes с типом bloom
https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#available-types-of-indices
внутренности наружу вы не вытащите, но сможете что-то оптимизировать по выборкам если bloom фильтр прямо ваш юзкейсMergeTree | ClickHouse DocumentationMergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine
-
если из разных источников одновременно идет запись в MergeTree таблицу
1) пишите большими батчами а не одиночными строками
2) каждый INSERT запрос разбивается на блоки по миллиону записей (если записей в INSERT меньше миллиона, то блок один, см. https://clickhouse.tech/docs/en/operations/settings/settings/#min-insert-block-size-rows)
дальше в зависимости от вашего PARTITION BY и данных в блоке этот блок бьется по кол-ву партиций (обычно так и остается один блок), дальше для каждой партиции создается "кусок данных" (см. system.parts) в котором данные уже сжаты и отсортированы в .bin файлы по ORDER BY \ и созданы .mrk* файлы по PRIMARY KEY \ *.idx по data skip indexes
3) каждый новый system.parts "имутабелен" сразу доступен для чтения после создания без всяких блокировок
4) после этого идет фоновый процесс background merge который сливает более мелкие parts внутри partition в более крупныеSettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
-
Спасибо! То есть я правильно понимаю что какие-то дополнительные настройки не требуются кроме батчей?
-
Можно query_id задать наперед.
-
к сожалению мне нужен именно стейт, есть два провайдера которые хотят обменяться данными, но данные в открытом виде предоставлять не могут
придется вытаскивать и строить стейт вне кликхауса ( -
через settings? не подскажете настройку?
-
Через setting не получится. тк для этого кх должен распарсить запрос и в этот момент query_id уже назначен
-
Как вы запрашиваете кх?
-
clickhouse-client --help | grep query_id
-
да, нужна только вставка батчами
ну у вас должно хватать пропускной способности чтобы эти батчи сжатые последовательно писать на диск
то есть если вы запустите 100 паралельных INSERT а диска \ RAM и CPU хватает только на 10
то будет боль
clickhouse при вставке аллоцирует буфера под каждую колонку около 2 мегабайт
100 колонок - 2 гигабайта памяти на 1 INSERT -
у кого-нибудь работают словари на основе внешних программ?
2021.04.28 14:36:59.198887 [ 10075468 ] {} <Trace> ExecutableDictionarySource: loadKeys Executable: /Users/bvt/Clickhouse/bin/mystem size = 1
2021.04.28 14:36:59.198918 [ 10075468 ] {} <Trace> ShellCommand: Will start shell command '/bin/sh' with arguments 'sh', '-c', '/Users/bvt/Clickhouse/bin/mystem'
2021.04.28 14:36:59.200283 [ 10075468 ] {} <Trace> ShellCommand: Started shell command '/bin/sh' with pid 82372
2021.04.28 14:36:59.200704 [ 10075453 ] {} <Trace> BaseDaemon: Received signal 6
2021.04.28 14:36:59.201198 [ 10075632 ] {} <Fatal> BaseDaemon: ########################################
2021.04.28 14:36:59.201272 [ 10075632 ] {} <Fatal> BaseDaemon: (version 21.4.1.1, no build id) (from thread 10075468) (no query) Received signal Abort trap: 6 (6)
2021.04.28 14:36:59.201292 [ 10075632 ] {} <Fatal> BaseDaemon:
2021.04.28 14:36:59.201316 [ 10075632 ] {} <Fatal> BaseDaemon: Stack trace: 0x7fff20367462 -
-
curl "http://localhost:8123/?query=SELECT ...&query_id=$(uuidgen)"
это HTTP интерфейс, соответсвенно будет работать в JDBC \ Python
какой у вас язык программирования, какая клиентская библиотека? -
GitHub - killwort/ClickHouse-Net: Yandex ClickHouse fully managed .NET client
Yandex ClickHouse fully managed .NET client. Contribute to killwort/ClickHouse-Net development by creating an account on GitHub.
-
через clickhouse-Net
-
тяжко, пробежался краем глаза этой либе C#
оно не полностью реализуют binary протокол и все не умеют задавать query_id
можно попробовать вот эту либу
https://github.com/DarkWanderer/ClickHouse.Client
кажется тут можно параметры задавать
https://github.com/DarkWanderer/ClickHouse.Client/blob/dfbb23d8dd4e311632f289fd91b25f6ffda2f66b/ClickHouse.Client/ClickHouseUriBuilder.cs
Но это не точно
так что вам видимо надо идти на поклон в github к авторам библиотекGitHub - DarkWanderer/ClickHouse.Client: .NET client for ClickHouse.NET client for ClickHouse. Contribute to DarkWanderer/ClickHouse.Client development by creating an account on GitHub.
-
спасибо, это просто хотелка, чтобы сделать красиво у себя внутри
-
двачую DarkWanderer/ClickHouse.Client, работает как часы
-
Привет, сори, если это плохой вопрос для данного канала, но может ребята из Altinity подскажут. Подключили tableau к clickhouse через odbc. (clickhouse-odbc-1.1.8-1.el7.x86_64.rpm).
Но при extract'e в tableau ловим переодически ошибку:
Connectionless Failure (status code = 10000, Tableau was unable to generate a query to perform this operation. Generic ODBC requires additional configuration. The driver and DSN (data source name) must be installed and configured to match the connection. Unable to connect using the DSN named "ClickHouse DSN (Unicode)". Check that the DSN exists and is a valid connection. )
Может сталкивались с этим ? -
Всем привет, заинтересовала технология clickhouse, может есть какой-нибудь не сложный обучающий материал по нему? Помимо доки и google))))
-
почитайте https://github.com/ClickHouse/clickhouse-odbc/
вы extract делаете на tableau server или desktop ?
судя по сообщению об ошибке, у вас точно ODBC драйвер настроен на машине где extract делается?GitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouseODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
на сервере.
- отчет опубликован сервере на live-подключении к кликхаусу
- тип подключения сменен на extract, который успешно создался
- дальше он успешно не создавался () -
а сервер cloud ? или свой купленый?
там точно odbc.ini правильный?
увы, у нас мало опыта с tableau -
сервер свой. odbc.ini сделан по инструкции с https://github.com/ClickHouse/clickhouse-odbc . И судя по тому что первые 2 шага срабатывают:
- отчет опубликован сервере на live-подключении к кликхаусу
- тип подключения сменен на extract, который успешно создался
То соединение получается.
Почему потом пропадает - не понятно. Вот ищем возможные решения )GitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouseODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
Можно статьи на хабре посмотреть. Недавно была про нестандартное использование.
-
ну вообще clickhouse-client это симлинк на clickhouse
так что вполне возможно вы как то сервер не так собрали -
начните отсюда
https://clickhouse.tech/docs/ru/Обзор | Документация ClickHouseЧто такое ClickHouse ClickHouse - столбцовая система управления базами данных (СУБД) для онлайн обработки аналитических
-
а вот такой тип имеет смысл и как он работает?
Array(LowCardinality(String))
Там словарь внутренний как? для всего массива или для конкретных позиций будет? -
Всем привет, какой наилучший способ загрузить Json line файлы, которые находятся на S3 используя JSONEachRow format в таблицу.
Есть ли возможность не указывать structure, так чтобы структуру бран с json. -
ну скорее словарь будет все таки для всего блока, а не для отдельной строки
а в массиве будут храниться идентификаторы из словаря -
структуру все равно придется задать
если структура сложная, то можно импортировать как JSONAsString
https://clickhouse.tech/docs/en/interfaces/formats/#jsonasstring
а в таблицу добавить позже поля с DEFAULT JSONExtract ..Input and Output Formats | ClickHouse DocumentationFormats for Input and Output Data ClickHouse can accept and return data in various formats. A format supported for input
-
точнее вам нужен будет JSONStringEachRow для сложного импорта
https://clickhouse.tech/docs/en/interfaces/formats/#jsonstringseachrowInput and Output Formats | ClickHouse DocumentationFormats for Input and Output Data ClickHouse can accept and return data in various formats. A format supported for input
-
еще можно тут идеи посмотреть
http://eng.uber.com/logging
https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup40/uber.pdfFast and Reliable Schema-Agnostic Log Analytics PlatformAt Uber, we provide a centralized, reliable, and interactive logging platform that empowers engineers to work quickly and confidently at scale. The logs are tag
-
Привет
Пытаюсь потестить различные комбинации кодеков на своих данных.
Что-то не пойму как к массиву целых кодек прицепить, типа такого не работает
CREATE TABLE default.Test
(
`timestamp` UInt32,
`value` Array(UInt32) CODEC(DoubleDelta,LZ4)
)
ENGINE = MergeTree()
PARTITION BY floor(timestamp / 86400)
ORDER BY (timestamp)
SETTINGS index_granularity = 8192 -
Есть возможность создать массив целых с кодеком?
-
Спасибо
-
Привет, а подскажите пожалуйста, в папке с Distributed таблицей появилась папка которая весит 300гб, с чем может быть связано такое поведение? версия КХ 19.15.3.6 , папка вида:
default@192%2E168%2E0%2E2:9000,default@192%2E168%2E0%2E3:9000 -
внутри файлы вида 3360347.bin + есть папка tmp и broken
-
Ошибку прочитайте при создании?
с кодеками все порядке у вас
а вот с PARTITION BY лучше поменять на toYYYYMM(toDateTime(timestamp))
дневные партиции применять надо очень осторожно
CREATE TABLE default.Test
(
timestamp UInt32,
value Array(UInt32) CODEC(DoubleDelta, LZ4)
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(toDateTime(timestamp))
ORDER BY timestamp
SETTINGS index_granularity = 8192
вот так нормально сработает -
это временные файлы которые по каким то причинам не могут быть вставлены в удаленный шард
у вас 300гигабайт данных которые не попали в MergeTree таблицы которые под капотом Distributed
логи смотрите /var/log/clickhouse-server
там у вас скорее всего забито все сообщениями с объяснением что не так... -
Ничего не изменилось
CREATE TABLE default.Test
:-] (
:-] timestamp UInt32,
:-] value Array(UInt32) CODEC(DoubleDelta, LZ4)
:-] )
:-] ENGINE = MergeTree
:-] PARTITION BY toYYYYMM(toDateTime(timestamp))
:-] ORDER BY timestamp
:-] SETTINGS index_granularity = 8192
CREATE TABLE default.Test
(
`timestamp` UInt32,
`value` Array(UInt32) CODEC(DoubleDelta, LZ4)
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(toDateTime(timestamp))
ORDER BY timestamp
SETTINGS index_granularity = 8192
Received exception from server (version 20.8.12):
Code: 36. DB::Exception: Received from localhost:9000. DB::Exception: Codec DoubleDelta is not applicable for Array(UInt32) because the data type is not of fixed size.
0 rows in set. Elapsed: 0.002 sec. -
И чем плохи дневные партиции не подскажите?
-
2021.04.28 16:56:49.098740 [ 44 ] {} <Error> tbname.Distributed.DirectoryMonitor: Code: 209, e.displayText() = DB::NetException: Timeout exceeded while reading from socket (192.168.0.2:9000): while receiving packet from 192.168.0.1:9000, Stack trace:
-
обновитесь до 21.3
https://kb.altinity.com/altinity-kb-schema-design/codecs/codecs-on-array-columns -
<Error> executeQuery: Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 167307. Bytes expected: 188879. (version 19.15.3.6 (official build)) (from 192.168.0.3:7980) (in query: INSERT INTO default.tbname_local (dt, date, key, type, category, action, message, referer, origin, custom_id, geoip, city, country, sort) VALUES), Stack trace:
-
@BloodJazMan вот такое вижу в логах
-
эх, спасибо.
-
тем что они нужны только если у вас запросы в основном "за один день"
и если данных у вас единицы гигабайт за день СЖАТЫХ данных...
а иначе создают просто кучу мелких каталогов в которых больше паралельного чтения и хуже компрессия
ну тогда PARTITION BY toDate(timestamp)
попробуйте -
так и есть, 90% за один день или меньше, поэтому и сделали такие партиции
-
версии clickhouse одинаковые?
сеть между узлами clickhouse не флапает?
19.15 откровенно старая версия снятая с поддержки -
одинаковая, не флапает
-
а откуда тогда timeout, странно...
iperf запустите посмотрите -
хорошо, спасибо
-
возможно КХ не успеваем вставлять данные, будем изучать
-
-
-
-
-
-
-
проверьте доступность zk
-
-
в system.replicas zookeeper_exception - Code: 999, e.displayText() = Coordination::Exception: No node, path: /clickhouse/tables/table/log (version 21.2.4.6 (official build))
-
в КХ примерно 2Тб, в ЗК примерно 1.5Гб
3 хоста, 1 шард, >1000 таблиц -
Вот и мне показалось, что у меня многовато. Как понять что там лишнее?
-
в system.zookeeper есть такой путь?
-
вот так сразу не скажу. над смотреть сколько данных прилетает, много ли мержей и пр.
-
объем этих мержей
-
а может у вас просто логов 45 гигов)))
-
на другом узле КХ этот путь виден
-
Каждую секунду прилетает примерно 10000 строк
-
а таблица то есть на всех серверах?
-
да
-
-
ZK метаданные хранятся
50Gb это у вас снапшот такой большой .... многовато
настройки ZK проверьте
у вас старые логи скорее всего не удаляются
https://clickhouse.tech/docs/en/operations/tips/#zookeeper
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-zookeeperClickHouse DocumentationUsage Recommendations CPU Scaling Governor Always use the performance scaling governor. The on-demand scaling governor w
-
что стоит в секции <zookeeper> в конфигах на обоих хостах?
zookeeper то где был? его тоже перенесли? или с нуля развернули? -
я бы все понял но по путю /clickhouse/tables/ на рабочем хосте с десяток таблиц а на проблемном только 3
-
зукипер как есть в докере так и останется
-
вы до него с хостовой машины хотя бы порт пробросили тогда?
-
system.macros поменялся по сравнению с тем что было в docker?
-
транспортный уровень нормальный, соединение есть
-
нет в конфиге остался старый макрос, не меняли и не трогали
-
а куда тогда ноды делись?
-
SELECT * FROM system.zookeeper WHERE path='/'
показывает тоже самое что показывало с clickhouse ? -
-
@BloodJazMan @vvvjhaq спасибо, за помощь, нашел в чем дело. в секции zookeeper на перенесеном хосте отсутвовала секция <root></root>
-
-
Не обманули на счёт оператора для КХ
-
-
-
-
привет! а в чем проблема когда функции хешиования возвращают вот такое ? например select MD5('test')
-
В клиенте? А если поселектить из командной строки через clickhouse-client?
-
Попробую. Но могу сказать в dataGrip и dbeaber также криво
-
Всем привет! Помогите плз, создаю мат вьюху в CH - ниже буквальный код. После создания вьюха не пишет новые данные, хотя похожая вьюха с другим запросом но по сути аналогичным начала писаться нормально и никаких проблем нет! В чем может быть дело ? или может быть все таки что то стоит поменять при создании ?? буду рад если накинете идей куда стоит копать и в чем могут быть причины такого поведения мат вьюх!
CREATE MATERIALIZED VIEW log.users_data_based_on_income_view
ENGINE = SummingMergeTree()
PARTITION BY round(user_id / 1000000)
ORDER BY user_id
SETTINGS index_granularity = 8192 POPULATE AS
SELECT
session__uid AS user_id,
install_date,
uniq(event_date) AS days_in_game,
max(event_date) AS last_session_date,
max(event_time) AS last_session_time,
argMax(event_date - install_date, event_date) AS last_session_days_ago,
argMax(session__payer_type, event_time) AS payer_type,
argMax(session__pay, event_time) AS payer,
argMax(session__league, event_time) AS last_league,
argMax(session__app, event_time) AS last_app,
argMax(session__plt, event_time) AS last_plt,
multiIf(last_plt='vk' AND last_app='1', 'vk',
last_plt='ok' AND last_app='1', 'ok',
last_plt='fb' AND last_app='1', 'fb',
last_app='6', 'android',
last_app='7', 'ios',
last_app='2', 'st',
last_app='12', 'luv',
last_plt='vk' AND last_app IN ('9','10','11'), 'vk_instant',
last_plt='ok' AND last_app IN ('9','10','11'), 'ok_instant',
'other') AS last_platform,
argMax(session__tag, event_time) AS last_tag,
argMax(session__rfm, event_time) AS last_rfm,
count() AS sessions_total,
countIf(event_date - install_date = 0) AS sessions_0,
countIf(event_date - install_date = 1) AS sessions_1,
countIf(event_date - install_date = 3) AS sessions_3,
countIf(event_date - install_date = 7) AS sessions_7,
countIf(event_date - install_date = 14) AS sessions_14,
countIf(event_date - install_date = 30) AS sessions_30,
countIf(event_date - install_date = 90) AS sessions_90,
countIf(event_date - install_date <= 1) AS sessions_cum_1,
countIf(event_date - install_date <= 3) AS sessions_cum_3,
countIf(event_date - install_date <= 7) AS sessions_cum_7,
countIf(event_date - install_date <= 14) AS sessions_cum_14,
countIf(event_date - install_date <= 30) AS sessions_cum_30,
countIf(event_date - install_date <= 90) AS sessions_cum_90,
uniqIf(user_id, event_date - install_date = 1) AS R1,
uniqIf(user_id, event_date - install_date = 3) AS R3,
uniqIf(user_id, event_date - install_date = 7) AS R7,
uniqIf(user_id, event_date - install_date = 14) AS R14,
uniqIf(user_id, event_date - install_date = 30) AS R30,
uniqIf(user_id, event_date - install_date = 90) AS R90,
uniqIf(user_id, event_date - install_date >= 1) AS R1_r,
uniqIf(user_id, event_date - install_date >= 3) AS R3_r,
uniqIf(user_id, event_date - install_date >= 7) AS R7_r,
uniqIf(user_id, event_date - install_date >= 14) AS R14_r,
uniqIf(user_id, event_date - install_date >= 30) AS R30_r,
uniqIf(user_id, event_date - install_date >= 90) AS R90_r
FROM log.events ALL INNER JOIN (
SELECT
DISTINCT
event_date AS install_date,
install__uid AS user_id
FROM log.events
WHERE event = 'install'
) AS r USING user_id
WHERE event = 'session'
GROUP BY
user_id, install_date -
Так правильно - оно возвращает сырые байты.
Посмотреть можно в клиенте через hex().
В бобре тоже можно настроить отображение - какой то там native правильно показывает. -
Спасибо, посмотрю
-
ALL INNER JOIN возвращает пустоту справа ?
-
извините, не совсем понял вопрос, вы имеете ввиду могут ли во внутреннем подзапросе быть такие user_id которых нет во внешнем ? если так то да, могут
-
а вообще в этом запросе в мат.вью log.events -- это не таблица на диске, это данные вставленные инсертом, вставляете одну строку, в log.events будет та самая одна строка
-
не совсем вас понял ) я не силен в администрировании CH и кажется не все догоняю )
log.events это таблица в данном случае, не вьюха. а я пытаюсь сагрегировать из этой таблицы мат вьюху с агрегатными данными
в этой таблицу log.events у нас лежит буквально все и потому все долго грузится если напрямую оттуда брать данные или еще что-то дополнительно мерджить и потому создаю мат вьюху. В log.events 50 столбцов и на них завязано огромное число ивентов через алиасы -
сначала сюда https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597
https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf -
понял, спасибо!)
-
Всем привет
А можно как то модели Json создать табличку? -
нет
-
Жаль, спасибо
- 29 April 2021 (154 messages)
-
Здравствуйте! Существует ли какая-нибудь оптимизация для JOIN двух MergeTree таблиц с одинаковым первичным ключом? Пытаюсь объединить две таблицы при помощи ANY LEFT JOIN, но судя по расходу памяти, правая таблица читается в память :-(
-
Нашёл setting join_algorithm='partial_join' и это помогает с расходом, но если я правильно понимаю, там нет оптимизации для случая, когда ключи одинаковые и уже отсортированы, поэтому работает значительно медленнее.
-
можно внешнюю инсталяцию
оператор пока Zookeeper сам не управляет -
нету чистого merge join и даже непонятно когда будет
-
-
-
Отправил запрос на api appmetrica, но не знаю как прикрепить oauth_token, параметром не принимает, помогите плиз)
-
-
Доброе утро
Кто-то пробовал dbt в связке с clickhouse?GitHub - silentsokolov/dbt-clickhouse: The Clickhouse plugin for dbt (data build tool)The Clickhouse plugin for dbt (data build tool). Contribute to silentsokolov/dbt-clickhouse development by creating an account on GitHub.
-
Через hex() получилось. Спасибо
-
всем привет. подскажите, в clickhouse есть функции для работы с xml, как с json например? Мне надо извлечь поля из строки, которая является валидным xml, хотелось бы делать это не регуляркой, а каким-то человеческим способом = )
-
Rewrite extractTextFromHTML function by alexey-milovidov · Pull Request #21292 · ClickHouse/ClickHouse
Changelog category (leave one): Not for changelog (changelog entry is not required) Prepare #19600 for release.
-
спасибо, но в моей версии(21.1) нет этой функции = (
-
Добрый день, подскажите в чём может быть проблема
Залил данные через Distributed таблицу на шарды, когда пытаюсь удалить (drop table ... ) пишет DB::Exception: File access error: Invalid cross-device link.
CH не в докере -
Еще раз привет всем. Подскажите, пожалуйста, какие best practice есть для создания "широкой таблицы" в clickhouse. Т.е. когда из kafka из 3-х топиков прилетают данные (в 3 разные таблицы), а дальше нужно эти данные ссджойнить между собой и положить в одну широкую таблицу.
-
у вас симлинки какие то были?
а удалить вы пытаетесь что именно? MergeTree Таблицу или Distributed?
покажите запрос DROP TABLE полностью? -
самый лучший best practices это делать все это до кликхауса, все остальное это будут разного рода костыли
-
Симлинков не было. Удалить пробовал и Distributed и ReplicatedMergeTree: DROP table shard.sss_only;
-
sss_only это Distributed или MergeTree таблица?
ошибка одинаковая и на то и на другое?
ls -la /var/lib/clickhouse/
что показывает?
полный стектрейс ошики можете из /var/log/clickhouse-server/clickhouse-server.err.log привести? -
Спасибо, вы имеете ввиду ставить что-то вроде greenplum/vertica чтобы там джойнить и потом лить в kafka ?
-
В целом да.
Но в зависимости от всяческих обстоятельств вида (размер таблиц, кол-во сообщений для каждого топика в секунду) есть варианты делать в кх. но с тремя таблицами это грубо говоря будет 3 пайплайна каждый будет джойнить 3 таблицы, что есть боль -
sss_only - ReplicatedMergeTree
Ошибка одинаковая на Distributed и ReplicatedMergeTree
ага.. оказалось есть симлинк
store -> /mnt/shard2/.clickhouse/store
2021.04.29 14:57:09.856855 [ 1115772 ] {1d56cc78-495f-460d-ae42-11ef109e4085} <Error> TCPHandler: Code: 1000, e.displayText() = DB::Exception: File access error: Invalid cross-device link: /var/lib/clickhouse/store/5aa/5aa54f37-a87e-4b29-9387-2abe0240315e/sss_only.sql, Stack trace:
0. Poco::FileImpl::handleLastErrorImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x12681344 in /usr/bin/clickhouse
1. Poco::File::renameTo(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x12684d3c in /usr/bin/clickhouse
2. DB::DatabaseAtomic::dropTable(DB::Context const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) @ 0xefa5ba5 in /usr/bin/clickhouse
3. DB::InterpreterDropQuery::executeToTableImpl(DB::ASTDropQuery&, std::__1::shared_ptr<DB::IDatabase>&, StrongTypedef<DB::UInt128, DB::UUIDTag>&) @ 0xf21c9bc in /usr/bin/clickhouse
4. DB::InterpreterDropQuery::executeToTable(DB::ASTDropQuery&) @ 0xf21aab6 in /usr/bin/clickhouse
5. DB::InterpreterDropQuery::execute() @ 0xf21a5e5 in /usr/bin/clickhouse
6. ? @ 0xf7338b2 in /usr/bin/clickhouse
7. DB::executeQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool) @ 0xf7321f3 in /usr/bin/clickhouse
8. DB::TCPHandler::runImpl() @ 0xfee929d in /usr/bin/clickhouse
9. DB::TCPHandler::run() @ 0xfefb869 in /usr/bin/clickhouse
10. Poco::Net::TCPServerConnection::start() @ 0x125b5b0f in /usr/bin/clickhouse
11. Poco::Net::TCPServerDispatcher::run() @ 0x125b7521 in /usr/bin/clickhouse
12. Poco::PooledThread::run() @ 0x126edc49 in /usr/bin/clickhouse
13. ? @ 0x126e9aaa in /usr/bin/clickhouse
14. start_thread @ 0x814a in /usr/lib64/libpthread-2.28.so
15. clone @ 0xfcf23 in /usr/lib64/libc-2.28.so -
А, если чисто теоретически сделать 3 MV с джойнами (на каждую из таблиц) и лить в ReplaceMergeTree c версией по полю даты. Т.е. самый последний триггер будет иметь самую полную сборку и перезапишет предыдущий row c недостающими данными. Такая схема очень высокую нагрузку даст?
-
Ну представьте на каждую вставку будет в память подниматься две таблицы и строится хешмапа для них, это дорого и долго
-
Using Joins in ClickHouse Materialized Views
ClickHouse materialized views provide a powerful way to restructure data in ClickHouse. We have discussed their capabilities many times in webinars, blog articles, and conference talks. One of the most common follow-on questions we receive is whether materialized views can support joins. The answer is emphatically yes.
-
store это Atomic
на него будут делаться симлинки при создании таблиц из /var/lib/clickhouse/data
если он ведет на другое устройство
то вот причина ошибки -
Может тогда имеет смысл хранить в одной таблице 3 массива (6 если с именами полей) и использовать array join по необходимости?
-
Спасибо!
-
но тут не ясно как вы данные в таблицу умудрились вставить =)
-
Вставлял так: cat sss_only | clickhouse-client --query="INSERT INTO default.sss_only FORMAT CSV". default.sss_only - Distributed
-
причём раньше drop отрабатывал.. data и store никуда не переносились
-
Можете объяснить чуть подробнее. Если есть консюмеры, которые льют в 3 таблицы - как из них делать таблицу с 3-мя массивами?
-
Лить в одну таблицу, но 2 (4) массива будут пустыми на одну запись.
-
получается такой, немного event подход. Но как я понял потом довольно дорого работать с массивами, т.к. при select они читаются полностью + жмутся хуже.
-
/report
-
-
вообще, дропаешь дистрибутед, альтеришь локальные таблицы на кластере, пересоздаёшь дистрибутед
-
А нельзя не дропать? Как то обновить. Так же получается простой.
-
раньше в смысле это была какая то старая версия clickhouse?
и вы ее обновили и данные заново вставили? -
теоретически может и можно, но дистрибутед же создаётся на основе локальных таблиц, и в случае ручного альтера дистрибутеда нужно будет следить, что всё совпадает (это мысли вслух). вот есть кусочек из доки: For tables that don’t store data themselves (such as Merge and Distributed), ALTER just changes the table structure, and does not change the structure of subordinate tables. For example, when running ALTER for a Distributed table, you will also need to run ALTER for the tables on all remote servers.
-
-
версия ClickHouse не менялась 21.4.5.46
только версия зукипера поменялась.. после этого drop перестал работать. не знаю связано это как-то или нет -
Спасибо. Ну впринципе можно сделать копию distributed таблицы новую и подменить ее через rename
-
у вас прямо жёстким потоком летят запросы, что пару секунд критично?
-
Ну вот сейчас ещё не так критично, но в обозримом будущем будет чит критично. С учётом того что бывают сервисы которые отправили данные, таблица не доступна и они их не держат в очереди, а уже запишут следующую порцию данных
-
сначала альтеры на физические таблицы (alter ... on cluster ... add column ... )
потом альтер на дистрибьютед -
unhex(col_name)
-
Да, так было бы не плохо. Вот просто нет понимания что distributed таблица адекватно воспринимает ручной alter table
-
дистрибьютед - это просто интерфейс, не привязанный а задекларироанный
т.е. если в шардах есть колонка а в дистрибьютед нету - ничего страшного - инсерт поймет
а вот наоборот - чуть опаснее - можно очередь отрастить и не заметить (но при этом тож ничего необратимого не должно случиться) -
о, спасибо
-
Спасибо, понял. Такой вариант тогда подходит, добавления в поочередно в обе таблицы
-
-
-
-
сразу поправка про в "обе"
лучше привыкните к мысли что каждая "физическая таблица" - это отдельная сущность (несмотря на то что они легко создаются и альтерятся с инструкцией on cluster)
т.к. в КХ каждый сам-себе мастер -
unhex(your_hex_string)
-
👌
-
Всем привет!
Скажите, плиз, а нет ли какой-нить функции в КХ, чтобы можно было группировать по определенному интервалу (не дата и время), по аналогии с датой и временем
toStartOfMinute(insert_ts)
в идеале что-то типа:
toStartOfTenSecond(8) => 10
toStartOfTenSecond(11) => 10
ну или самому задать INTERVAL 10 -
Спасибо 👍
-
Dates and Times | ClickHouse Documentation
Functions for Working with Dates and Times Support for time zones. All functions for working with the date and time that
-
но он требует date or datetime вроде, а у меня float64
-
конкретно кейс с 10 выглядит как какой-то round(<value>, -1)
-
храни тебя господь))
-
-
-
😁👍
-
Добрый день! Где можно посмотреть кешируемые схемы Avro для Kafka engine и кешируются ли они вообще? Ощущение что да, так как ловил ошибку не правильной схемы, поправил типы - пересоздал все таблицы(Kafka engine, mat view и mergeTree), а ошибка сохраняется, хотя в реестре схем валидная схема
-
Кешируются
This -
благодарю
-
ну DROP без ON CLUSTER
вообще ZK не должен касаться...
очень странно
ну то есть у вас реально нету cross device symlink? или все таки есть?
mount /var/lib/clickhouse
что показывает? -
Cross device symlink есть. Просто он и раньше был, но drop отрабатывал. Изменилась только версия зукипера.
Сейчас будем пробовать без симлинков -
Всем добрый день. Столкнулся с довольно странным багом при указании where. В таблице поле типа float, делаю where col >= 12346
Мне приходят значения 12345
цифры меньше тех, которые я запрашиваю через >= -
С некоторым разбросом
-
У кого нибудь есть идеи?
-
Coordination::Exception: Zookeeper root doesn't exist. You should create root node <path> before start. (No node) (version 20.12.4.5 (official build)) with status 500
-
Это надо делать вручную? Не работает create table + ReplicatedMergeTree
-
Вижу по конфигу для примера, что да, если прописан root.
-
Хорошо бы увидеть пример с реальными числами и тогда можно сразу на гитхаб даже идти
-
сделайте закреп с вашим пдф, как работает MV в кликхаусе, много вопросов отпадет
-
конкретное значение 12346 ?
или это от балды вы значение выбрали в чат написали? -
float какой? float32 или float64?
-
я храню timestanp в FLOAT, запрашиваю данные от указанного таймштампа, вот и нашлось такое. сейчас напишу на гитхаб с примером данных и запросом
-
можно без всяких массивов взять AggregatingMergeTree, ключи по которым вы делаете джоин добавляете в order by, поля из разных таблиц делаете как SimpleAggregateFunction(anyLast, Nullable())
-
Спасибо, очень интересное решение)
-
есть два типа float ;) float32 и float64
ок. присылайте ссылку на github issue -
Коллеги, добрый день. Столкнулись с забавной ситуацией при использовании буферных таблиц в VIEW с JOIN. clickhouse 21.3.2.5
В частности - почему-то без буферных таблиц мы упёрлись в память в запросе, а при использовании буферной таблицы в память не упираемся. WHERE не пробрасывается вглубь VIEW без буферной таблицы.
Никто с таким не сталкивался ?
diff для explain этих запросов выглядит так (1.e - с буфером, 2.e - без буфера):
$ diff -ur 1.e 2.e
--- 1.e 2021-04-29 15:07:38.467669770 +0300
+++ 2.e 2021-04-29 15:08:07.536863165 +0300
@@ -54,12 +54,8 @@
Expression (Projection)
CreatingSets (Create sets before main query execution)
Expression (Before ORDER BY)
- Filter (WHERE)
- SettingQuotaAndLimits (Set limits and quota after reading from storage)
- Union (Unite sources from Buffer table)
- SettingQuotaAndLimits (Lock destination table for Buffer)
- ReadFromStorage (MergeTree)
- ReadFromPreparedSource (Read from buffers of Buffer table)
+ SettingQuotaAndLimits (Set limits and quota after reading from storage)
+ ReadFromStorage (MergeTree)
CreatingSet (Create set for subquery)
Expression ((Projection + Before ORDER BY))
SettingQuotaAndLimits (Set limits and quota after reading from storage) -
это все неправда
-
alter table MergeTreetable add column ...
alter table Distributedtable add column ... -
create .... AS ... это вообще не то что вы подумали. AS создает список полей, его можно и вручную задать.
-
спасибо 🙏
-
Float32
-
какая версия КХ ? Что будет если написать
where col >= cast('12345' as Float32)
и если where identity(col) >= 12345 -
в смысле с буфферной таблицей where проталкивается вниз?
-
да, именно так. с буферной проталкивается, без неё нет
-
сломали значит что-то в 21.3
-
1. возможно ли в клике обратиться к конкретной партиции?
2. Стоит ли партиционировать таблицу весом в 350гб? Сколько лучше оставить гб в одной партиции, если необходимо?
3. Получим ли мы выигрыш при чтении, если сделаем партиции и не будем обращаться к конкретной партиции? -
1. ДА. В КХ есть partition elimination/pruning , КХ читает только те ПАРТЫ которые попадают под условие в WHERE
2. ХЗ
3. Да -
Ребята
наткнулся на странные грабли (для меня новые и в чатке тут не нашел)
create database test_atomic ENGINE=Atomic ;
create table test_atomic.ttt1 (c1 String) ENGINE ReplicatedMergeTree ORDER BY (c1);
create table test_atomic.ttt2 (c1 String) ENGINE ReplicatedMergeTree ORDER BY (c1);
exchange tables test_atomic.ttt1 and test_atomic.ttt2;
комманда на exchange кидает
Received exception from server (version 20.12.4):
Code: 1. DB::Exception: Received from localhost:9000. DB::Exception: System call renameat2() is not supported.
эт нам кх надо пересобрать? или у меня версия с багой?
* Connected to ClickHouse server version 20.12.4 revision 54442.
** линух вродь свеж - Kernel: Linux 5.10.0-0.bpo.4-amd64 -
Винда? Докер? ZFS ?
это уже поправлено. -
ClickHouse/ClickHouse
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
есть разница между database и schema в ch? если есть, то какая?
-
Всем привет. Есть много, очень много данных по страницам книжек в виде json, типа автор, год издания, про что книга, статьи, формулы, таблицы и т.д, много атрибутов, какой движок посоветуете.
-
Вопрос вероятно по Кафке, а не по КХ, но мб кто сталкивался и подскажет в какую сторону копать. Кафку перевезли в кубер, пересоздал таблицы с кафка-движком, после чего часть из них перестала читаться - MV вообще не срабатывает, а прямое обращение к кафка-таблице выдаёт ошибку: Connection refused: while fetching schema id = 191: While executing SourceFromInputStream.
При этом так ведёт себя только часть кафка-таблиц. Остальные (настройки отличаются только названием топика да набором полей) прекрасно работают.
Что это может быть? -
Коллеги, подскажите, как вынести вот такую опцию в конфиг
SET joined_subquery_requires_alias = 0;
пробовал - не помогает, не поднимается сервер
<joined_subquery_requires_alias>0</joined_subquery_requires_alias> -
Попробуйте добавить в секцию settings, как connect_timeout здесь
https://github.com/ClickHouse/ClickHouse/blob/91dfc7d50c8309decb2da6d890eb4ea5b52af595/tests/integration/test_cluster_copier/task_trivial.xml#L8 -
Зарепортил в гитхаб, сменил тип данных на UInt32, потеря точности после запятой для конкретно моей задачки не критична
-
понятия schema в КХ нет
-
в КХ один движок (для хранения) - MergeTree
-
Ок. Спасибо.
-
cat /etc/clickhouse-server/users.d/z.xml
<?xml version="1.0"?>
<yandex>
<profiles>
<default>
<joined_subquery_requires_alias>0</joined_subquery_requires_alias>
</default>
</profiles>
</yandex>
рестарт не нужен -
так это не баг вовсе
SELECT toFloat32(1619675611)
┌─toFloat32(1619675611)─┐
│ 1619675600 │
└───────────────────────┘ -
Спасибо! Работает! ты лучший!
-
Не работает так. Сервер не валится на конфиге, но опция не срабатывает. @den_crane ниже отписал - должно быть в в profile юзера default
-
Мдя, надо значит доку перечитать
-
википедию скорее, та же проблема в любой базе, и в любом языке программирования. Точности float32 недостаточно для таких чисел
-
А в другой таблице обратная ситуация - WHERE не проталкивается для буферной таблицы:
$ diff -ur 1.e1 2.e1
--- 1.e1 2021-04-29 18:24:32.834374174 +0300
+++ 2.e1 2021-04-29 18:24:57.358548141 +0300
@@ -17,16 +17,12 @@
Filter ((WHERE + Projection))
CreatingSets (Create sets before main query execution)
Expression (Before ORDER BY)
- Filter (WHERE)
- Join (JOIN)
- Expression (Before JOIN)
- ArrayJoin (ARRAY JOIN)
- Expression (Before ARRAY JOIN)
- SettingQuotaAndLimits (Set limits and quota after reading from storage)
- Union (Unite sources from Buffer table)
- SettingQuotaAndLimits (Lock destination table for Buffer)
- ReadFromStorage (MergeTree)
- ReadFromPreparedSource (Read from buffers of Buffer table)
+ Join (JOIN)
+ Expression (Before JOIN)
+ ArrayJoin (ARRAY JOIN)
+ Expression (Before ARRAY JOIN)
+ SettingQuotaAndLimits (Set limits and quota after reading from storage)
+ ReadFromStorage (MergeTree)
CreatingSet (Create set for JOIN)
Expression ((Projection + Before ORDER BY))
SettingQuotaAndLimits (Set limits and quota after reading from storage) -
ну это все нормально. Там еще 500 мест где push-down не доделан.
-
нет, тут тоже самое. Это я туплю.
-
-
-
-
-
так можно не использовать их при селектах. Просто сделать 2 разных таблицы Distributed
-
-
И снова здравствуйте! Коллеги, есть вопрос: обновляюсь с 20.1.3.7 на 21.1.7.1,
смущает при старте вот такая запись в логах ошбок, как ее победить? ругается на все таблицы на сервере
поставил в конфиге enable_mixed_granularity_parts=0, варнинг все равно есть
<Warning> shard09.tableXXXX: Table can't create parts with adaptive granularity, but settings min_rows_for_wide_part = 0, min_bytes_for_wide_part = 10485760, min_rows_for_compact_part = 0, min_bytes_for_compact_part = 0. Parts with non-adaptive granularity can be stored only in Wide (default) format. Settings 'min_rows_for_wide_part', 'min_bytes_for_wide_part', 'min_rows_for_compact_part' and 'min_bytes_for_compact_part' will be ignored. -
почему 0 ? enable_mixed_granularity_parts=0
в секции merge_tree эта настройка -
Сделал такой доп.конфиг в config.d, новые таблицы создаются со старым типом mrk — не mrk2
но варнинг есть, так и должно быть? или может где еще какую то опцию упустил?
<?xml version="1.0"?>
<yandex>
<merge_tree>
<enable_mixed_granularity_parts>0</enable_mixed_granularity_parts>
</merge_tree>
</yandex> -
всем привет, а подскажите как сделать коммулятив по дням по уникальным пользователям.
Вот пример данных (по другому чёт я не понял как можно сделать, если подскажите буду благодарен)
(select d, user_id from (select toDate('2021-01-01') d, array(1, 2, 3) user_id) array join user_id)
union all
(select d, user_id from (select toDate('2021-01-02') d, array(2, 3, 5) user_id) array join user_id)
union all
(select d, user_id from (select toDate('2021-01-03') d, array(2, 4, 1) user_id) array join user_id)
union all
(select d, user_id from (select toDate('2021-01-04') d, array(1, 5, 3) user_id) array join user_id)
Хочу получить на выходу вот такого рода
2021-01-01,3
2021-01-02,4
2021-01-03,5
2021-01-04,5
Не подскажите как можно сделать?
С суммой вроде как понятно, а вот как с униками такое же проделать?
Спасибо -
После обновления ClickHouse c версии 20.4 на 20.8 не стартует с кучей ошибок вида
2021.04.29 16:05:05.568532 [ 37 ] {} <Error> base.table: Part /var/lib/clickhouse/data/base/table/3_4_14776_11 is broken. Looking for parts to replace it.
2021.04.29 16:05:05.568554 [ 37 ] {} <Error> base.table: Detaching broken part /var/lib/clickhouse/data/base/table/3_4_14776_11 because it covers less than 2 parts. You need to resolve this manually
2021.04.29 16:05:05.569975 [ 33 ] {} <Error> DB::MergeTreeData::loadDataParts(bool)::<lambda()>: Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 2. Bytes expected: 8., Stack trace (when copying this message, always include the lines below):
0. Poco::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x18ccf210 in /usr/bin/clickhouse
1. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0xe62f32d in /usr/bin/clickhouse
2. DB::ReadBuffer::readStrict(char*, unsigned long) @ 0xe67356f in /usr/bin/clickhouse
3. DB::DataTypeNumberBase<double>::deserializeBinary(DB::Field&, DB::ReadBuffer&) const @ 0x1562cd71 in /usr/bin/clickhouse
4. DB::MergeTreePartition::load(DB::MergeTreeData const&, std::__1::shared_ptr<DB::IDisk> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x161f2dce in /usr/bin/clickhouse
5. DB::IMergeTreeDataPart::loadPartitionAndMinMaxIndex() @ 0x160b0310 in /usr/bin/clickhouse
6. DB::IMergeTreeDataPart::loadColumnsChecksumsIndexes(bool, bool) @ 0x160b623a in /usr/bin/clickhouse
7. ? @ 0x160f6aa2 in /usr/bin/clickhouse
8. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0xe65d697 in /usr/bin/clickhouse
9. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()&&...)::'lambda'()::operator()() const @ 0xe65de0a in /usr/bin/clickhouse
10. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xe65cba7 in /usr/bin/clickhouse
11. ? @ 0xe65b093 in /usr/bin/clickhouse
12. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
13. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 20.8.12.2 (official build))
База оформлена как volume в докере. Те просто сделал другой имадж и запустил на той же папке. Никто не сталкивался с таким повреждением данных? -
переделал на numbers для наглядности:
SELECT
groupArray(c),
groupArray(c) AS ar_c,
arrayCumSum(ar_c)
FROM
(
SELECT number AS c
FROM numbers(10)
)
Query id: 243531d9-5f6a-48ca-b763-437c6c15b4ff
┌─groupArray(c)─────────┬─ar_c──────────────────┬─arrayCumSum(groupArray(c))──┐
│ [0,1,2,3,4,5,6,7,8,9] │ [0,1,2,3,4,5,6,7,8,9] │ [0,1,3,6,10,15,21,28,36,45] │
└───────────────────────┴───────────────────────┴─────────────────────────────┘ -
так это коммулятивная СУММА получиться
а нужно уникальное колво.
С суммой всё просто -
-
ага
-
еще думал как-то через
arrayMap + arrayEnumerate, но походу не туда я смотрю -
В лоб
SELECT dt, arrayReduce('uniqExactMerge', arrayFilter((x,y) -> y <= dt, st_ar, dt_ar)) FROM (SELECT groupArray(d) as dt_ar, groupArray(st) as st_ar FROM ( SELECT d, uniqExactState(user_id) as st FROM ((select d, user_id from (select toDate('2021-01-01') d, array(1, 2, 3) user_id) array join user_id) union all (select d, user_id from (select toDate('2021-01-02') d, array(2, 3, 5) user_id) array join user_id) union all (select d, user_id from (select toDate('2021-01-03') d, array(2, 4, 1) user_id) array join user_id) union all (select d, user_id from (select toDate('2021-01-04') d, array(1, 5, 3) user_id) array join user_id)) GROUP BY d)) ARRAY JOIN dt_ar AS dt; -
Красивее наверное через оконки можно
-
насколько корректно использовать insert into localTable select * from remote(...) если в remoteTable много данных ?
-
(надо однократно перетащить таблицу в сотни миллионов записей между инстансами )
-
Сотни миллионов это немного
В гигабайтах сколько
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-data-migration/remote-...-table-function -
в гигабайтах 115
-
две локальных hyper-v виртуалки
-
Ну тогда можно, для пущей надежности можно разбить на несколько запросов по партициям
-
AggregatingMergeTree+SimpleAggregateFunction(groupUniqArrayArray, Array())+groupUniqArray
-
Спасибо большое,
но вот это прям совсем не андерстенд ((
arrayReduce('uniqExactMerge', arrayFilter((x,y) -> y <= dt, st_ar, dt_ar)) -
Господа, подскажите пожалуйста - был какой-то оператор вывести данные с прорежением (условно каждый 10й) или что-то вроде, просто ключевое слово - попадалось как-то в офф доке, а забыл
-
> arrayReduce применяет агрегатную функцию uniqExactMerge на элементы массива.
arrayFilter отфильтровывает все те стейты что были позже даты этой строки -
SAMPLE
-
но для него нужно указать SAMPLE KEY
-
Спасибо!
-
where rand()%10=0
-
оо, спасибо! это даже интереснее - не требует ключа сэмплинга похоже =)
-
-
Мерси
- 30 April 2021 (149 messages)
-
подскажите почему не пингуется порт 8123 ?
-
пробуй по ip
-
ip моего сервера нужен?
-
ну очевидно того куда конектитесь
-
Я так понял clickhouse-server:8123 это какой то яндексовский сервер, и коннект идет через него.
Если я правильно понял, то у меня нет его ip
А если понял не верно, и надо ip моего сервера, то выдает все равно такую же ошибку:
Failed to connect to 159.69.206.16 port 8123: Connection refused -
там вообще кликхауз запущен?
-
-
Понятно :-( спасибо. Пока перебьёмся partial_join.
-
-
-
понятия schema как в Postgres в clickhouse нет
тут database, по своим свойствам ближе к MySQL
то есть можно указывать db.table, и использовать USE db в binary protocol и default_database в HTTP для переключения на заданную db если писать просто table в запросах -
сколько весит один JSON в распакованном виде?
как вариант можно применить схему uber
когда данные хранятся в одном String поле с ZSTD компрессией
и потом по мере надобности сериализуются в отдельные поля
http://eng.uber.com/loggingFast and Reliable Schema-Agnostic Log Analytics PlatformAt Uber, we provide a centralized, reliable, and interactive logging platform that empowers engineers to work quickly and confidently at scale. The logs are tag
-
Переходите на Vertica и не партесь с этим ch
-
типа пятничный наброс? ;)
а 70 тыщ баксов на второй терабайт вы мне прямо сейчас выпишете? -
а че сразу Vertica ;) давайте уж на ExaSOL ;)
-
А вместо json использовать msgpack он быстрее
-
в clickhouse интегрирован simdjson
парсит гигабайты JSON в секунду..
нет надобности в дополнительной конверации -
🧐
-
ну тут такое дело, что бы распарсить гигабайты жсон в секунду нужно что бы диски могли их отдавать с такой скоростью.
-
Да, или память)))))
-
Слушайте, такой вопрос. А может такое быть, что реплицируемая таблица созданная с указанием on cluster, была взята и так просто проёбана на одном из хостов??? Либо вообще не создалась на одном хосте (из трёх)🙄🙄🙄
-
В идеальных условиях нет, на практике причин может быть много.
Кривой remote_servers на сервере который создавал таблицу, или у вас два хоста считают что имеют один и тот же хостнейм -
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-ddlworker/there-are-n-unfinished-hosts-0-of-them-are-currently-active-.
Тут можно поделать запросы к зк и логам -
404
-
телега подло точку убирает в конце из урла
-
Вот мразь🕺
-
Странно конечно... учитывая, что у нас mdb кх)
-
Всем привет ! изучаю Clickhouse, поставил на тестовый сервер, никак не могу подключиться с другой машины в домене к нему. Поставил запись в config.xml <listen_host>::</listen_host>, рестартанул. Не хочет и все - DBeaver возвращает ошибку коннекта 210, локально клиент работает, curl <сбственный ip>:8123 - Ок. В чем может быть причина? Слышал какой то где то TimeOut можно увеличить с 50ms до 10s, но где - непонятно...
-
-
ss -tl показывает что прослушиваются как я понимаю все ip по 8123 порту..., все фаейрволы у меня выключены, в системе еще крутится postgresql, к нему доступ есть..
-
-
Телнет с другой машины до 8123 есть?
-
попробуйте поменять :: на 0.0.0.0
-
-
ОК
-
А лучше - поднять в докере
-
поменял на 0.0.0.0, видно что применилось, но подключение все равно нет - time out
-
значит что-то со связностью до сервера
-
Вот такое нашел, где то в java файле CH меняется этот параметр, ранее была проблема, но curl давать должен ответ..
-
Да, похоже на то. Именно по этому порту почему то. На 5432 (Posgre висит) curl дает пустой ответ
-
А с локалхоста ок?
-
-
-
-
Подскажите, в БД хранятся диапазоны чисел в виде start_n и end_n, мне нужно запросить список значений. Я делаю это в виде
select start_n, end_n from table where (start_n < ${num1} and end_n > ${num1}) or (start_n < ${num2} and end_n > ${num2}) or ...
При таком запросе, так как БД не возвращает конкретное число, приходится уже локально проверять вхождение числа в диапазон и привязывать. Можно ли как то сделать, чтобы результат запроса содержал значение каждого запрашиваемого числа? -
-
А, ну, это банальная проблема сетевой доступности, ерунда
-
SELECT
arrayJoin([1, 5, 10]) as num,
start_n,
end_n
FROM table
where num between start_n and end_n -
Спасибо, попробую)
-
Здравствуйте!
если ли способ при балансировке нагрузки из шарда с 2 репликами выбирать одну и ту же всегда, не завязываяась на кол-во ошибок ? -
-
Settings | ClickHouse Documentation
Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
Settings | ClickHouse Documentation
Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
С какой версии добавлена настройка prefer_column_name_to_alias?
-
спасиб!
-
-
KILL QUERY WHERE query_id=XXX SYNC
уже запускали? -
ну рестарт сервера сделать можно
в целом прямо крашнуться не должно =) -
Всем привет! Подскажите плиз, самплинг на живую таблицу в рантайме можно добавить, если его нет или это из разряда фантастики?
-
Спасиб
-
https://clickhouse.tech/docs/en/sql-reference/statements/alter/sample-by/
можно просто WHERE rand() % 10 = 1 сделатьSAMPLE BY | ClickHouse DocumentationManipulating Sampling-Key Expressions Syntax: ALTER TABLE [db].name [ON CLUSTER cluster] MODIFY SAMPLE BY new_expression
-
sampling key просто выражение, оно на лету при чтении вычисляется
выражение sampling key должно вычисляться на основе полей в primary key
и вычисляется соответсвенно для гранул и позволяет быстро фильтровать data parts при чтении -
спасибо за хинт!
вероятностный подход в моём случае не очень хорошо
условно есть данные, которые заливаются каждую секунду и вероятностный подход будет брать нестабильные промежутки, в то время как самплинг более детерминирован - и условно при коэффициенте 0.1 будет выдавать каждую десятую секунду -
это прочитал, но возможность самплинга нужно организовывать при создании таблицы... вот и поинтересовался, есть ли возможность в рантайме именно включить эту возможность..
-
есть, но ограничено полями которые присутствуют в ORDER BY \ PRIMARY KEY
-
да, спасибо, вчера всё узнал - вечером мне всё подсказали
-
Всем привет. Может кто-нибудь из комьюнити dotnet поделиться опытом взаимодействия с ClickHouse через интерфейс MySql посредством официального коннектора MySql - Connector/Net? Столкнулся с проблемой коробочной магии, которая после подключения к бд выдает такое:
MySql.Data.MySqlClient.MySqlException (0x80004005): Code: 46, e.displayText() = DB::Exception: Unknown function TIMEDIFF. Maybe you meant: ['dateDiff']: While processing TIMEDIFF(now(), UTC_TIMESTAMP()) (version 21.3.3.14 (official build))
Может кто сталкивался и решил эту проблему. К сожалению, я нашёл упоминание об этом магическом запросе только тут. Заранее спасибо. -
TIMEDIFF(now(), UTC_TIMESTAMP())
Это часть вашего запроса? или что-то другое? -
это часть автомагии официального коннектора mysql для .net . Этот запрос автоматически выполняется при первом запросе к базе данных и я на него не могу повлиять, эта штука зашита где-то внутри коннектора
-
https://github.com/ClickHouse/ClickHouse/issues/18612
https://github.com/ClickHouse/ClickHouse/issues/17177Add support for TIMEDIFF function in MySQL Wire protocol (Mysql.Data .NET driver) · Issue #18612 · ClickHouse/ClickHouseUse case Mysql.Data is the default way to connect to mysql DB in .NET. https://dev.mysql.com/doc/connector-net/en/connector-net-versions.html Currently it's not possible to connect due to d...
-
а зачем из .net через mysql работать, если есть нормальный клиент для CH который работает адово быстро
-
GitHub - DarkWanderer/ClickHouse.Client: .NET client for ClickHouse
.NET client for ClickHouse. Contribute to DarkWanderer/ClickHouse.Client development by creating an account on GitHub.
-
-
который поверх ado.net? У нас пока нет цели запрашивать данные с помощью спеуифично написанных ручных запросов. Хочется сначала использовать удобные инструменты в виде linq to db и дальше уже развиваться в сторону оптимизаций
-
он не так чтобы поверх, он просто реализует IDbConnection и IDbCommand, что позволяет с помощью Dapper (или Linq2db видимо тоже) работать с CH
-
Добрый день. Не подскажите что делать с этой ошибкой?
DB::Exception: Function trimBoth has no information about its monotonicity. (version 21.3.2.5 (official build)) -
-
-
А очень много это сколько если не секрет?
-
-
-
Крайне маловероятно.. Даже в SQL такого нету :)
Так штаа лучше всего направить запись в новое место, а потом медленно и печально выполнить insert into select * -
Подскажите пож. функцию, которая заменяет row_number() over (order by time))
-
в 21.3 есть оконки
-
А вот я не могу апдейтнуться т.к. наш админ боится, что все сломается(((
-
Имхо фиксирует, но точно не помню
-
Неужели нет функции ранга по дате
-
кликхаус реализует MySQL протокол, но не реализует MySQL SQL диалект
-
нет, новые данные не будут перелиты в этот SELECT
селект на начальном этапе довольно быстро определяет список партов и список партиций по которым будет идти вычитка
новые парты в этот список не попадат -
У меня близкая потребность.
На эту тему есть Issue: https://github.com/ClickHouse/ClickHouse/issues/23682Create functions queryID and initialQueryID · Issue #23682 · ClickHouse/ClickHouseGoal is to find out (initial_)query_id of INSERT query that triggered this (current) Materialized View execution, in order to register this initial_query_id in statistics table. Why? It would enric...
-
Просто интересно, а в случае alter delete или че-то такого, все равно вычитает из "старых" партов?
-
а покажите запрос?
и структуру таблиц? -
alter delete
это условие которое будет переменено для фильтрации при операции background merge
посмотрите system.mutations Там есть parts_to_do -
Спасибо за информацию. 👌🏻
-
да да, по ссылкам в сообщении Дмитрия уже понял, что официальные коннекторы mysql - тупиковая ветвь развития архитектуры приложения, к сожалению
-
Спасибо за быстрый ответ. Крутое комьюнити, всегда бы так
-
Могу дать только в виде примера.
create table default.TABLE
(
id Int64,
...
name String,
sign Int8,
version UInt64
)
engine = VersionedCollapsingMergeTree(sign, version)
PARTITION BY name
ORDER BY (id);
select trimBoth(t.name) as name
from default.TABLE as t
where name in ('Строка1', 'Строка2') -
и такой простой запрос выдает такую ошибку?
-
да
-
Если данные нет. то запрос отрабатывает. Если есть в таблице данные то ошибка.
-
Добрый день. Ошибка в документации:
-
-
-
формат %g в результате возвращает две цифры столетия, а не года
-
Всем привет! А может кто-нибудь подсказать, есть ли возможность транспонирования в кликхаусе? Что-нибудь вроде PIVOT
-
а вас не затруднит сделать pull request?
там в целом ничего сложного
просто нажмите edit в http://github.com/ClickHouse/ClickHouse/tree/master/docs/ru/
в нужном файлеClickHouse/docs/ru at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Раньше не пользовался, попробую. %g использовался при формирования ключа для удаления документов перед загрузкой новой версии, полдня разбирался - почему документы за 20й год сдваиваются, а за 21й пропадают 😀
-
У вас же %g дал 21 год, т.е всё вроде ок или нет?
-
Привет! Подскажите, пожалуйста, как лучше поступить в ситуации, когда нужно поднять рядом с прод сервером (с большим количеством данных) его реплику. На время репликации запросов, я так понимаю, возможна ситуация, когда распределённый запрос будет приходить на эту реплику и отдавать пользователю неполные данные. Пока что рабочая версия просто закрывать на сервере-реплике порты 8123 и 9000 и ждать когда он стянет все актуальные данные, затем открыть порты. Есть ли иные способы, более правильные? :)
-
Так реплика просто спишет данные с прода, если вы туда не будете пускать запросы пользователей, то все будет нормально, если вы будете отправлять запросы только на прод - все будет ок.
-
Я про запрет запросов. Распределённые запросы же ходят на любую из доступных реплик, поэтому хотелось узнать нормальный способ не пускать их туда
-
ваш прод содержит уже реплицируемые таблицы?
Replicateg*? -
Именно
-
я про distributed таблицы пишу)
-
похоже дело в PARTITION BY name
зачем вам такое частое партицирование?
сколько уникальных значений у вас в name? -
около 20. оно у нас как описание enum внешней системы.
Но я не исключаю что в оригинальной таблице могут неправильно записать строку, сделать погрешность в виде пробела в конце.
А PARTITION BY добавил т к значений не много, а в запросах часто используется. -
%g дал 20й год, это %y дал 21год - правильно
-
Сделал еще тесты. Дело не в документации, поведение вообще непонятное, запрос:
SELECT
(
formatDateTime(toDate('2018-01-01'),'%g%m%d'),
formatDateTime(toDate('2019-01-01'),'%g%m%d'),
formatDateTime(toDate('2020-01-01'),'%g%m%d'),
formatDateTime(toDate('2021-01-01'),'%g%m%d'),
formatDateTime(toDate('2022-01-01'),'%g%m%d')
)
возвращает:
('180101','190101','200101','200101','210101')
Т.е. для дат '2020-01-01' и '2021-01-01' одно и то же значение в результате: '200101' -
SELECT
(
formatDateTime(toDate('2018-01-01'),'%g%m%d'),
formatDateTime(toDate('2019-01-01'),'%g%m%d'),
formatDateTime(toDate('2020-01-01'),'%g%m%d'),
formatDateTime(toDate('2021-01-01'),'%g%m%d'),
formatDateTime(toDate('2022-01-01'),'%g%m%d'),
formatDateTime(toDate('2023-01-01'),'%g%m%d'),
formatDateTime(toDate('2024-01-01'),'%g%m%d'),
formatDateTime(toDate('2025-01-01'),'%g%m%d')
)
Результат:
('180101','190101','200101','200101','210101','220101','240101','250101')
Для 21, 22, 23 года результаты странные. -
ну баг это
-
ну в общем непонятно, такое ощущение что комбинация PARTITION BY name + trimBoth в запросе дает ошибку
возможно это ожидаемое поведение (в смысле ошибка) -
-
-
zkCli.sh или https://github.com/go-zkcli/zkcli
в помощьGitHub - go-zkcli/zkcli: Simple, lightweight, dependable CLI for ZooKeeperSimple, lightweight, dependable CLI for ZooKeeper. Contribute to go-zkcli/zkcli development by creating an account on GitHub.
-
или
https://github.com/let-us-go/zkcli
он свежееGitHub - let-us-go/zkcli: A interactive Zookeeper client.A interactive Zookeeper client. Contribute to let-us-go/zkcli development by creating an account on GitHub.
-
выглядело как буд-то правильно работает только в високосные года, но расширил диапазон, а зависимости нет :)
-
а если альтер на другой реплике сделать? не поможет? у каждой реплики свои данные
-
ну можно KILL QUERY попробовать сделать там же видимо кто то ON CLUSTER Запустил с alter ?
-
да, ДДЛ то прошел...
все хосты обновили.
на рестарте не поднимается -
а стоп, а DDL прошел для чего? Для MV какого то или что?
-
не поднимается то что? ATTACH ?
ну можно metadata просто наверное поправить если понимаете как -
есть реплицированная таблица.
в нее добавили виртуальную колонку с лукапом в словаре
все добавилось.
на старте КХ все упало так как таблицы грузятся до словарей (аттач) -
-
а, ну типа словаря нет?
тогда тупо переносим .sql для падающей таблицы из metadata в /tmp
стартуем сервер
и сразу после старта clickhouse-client < /tmp/table.sql
кстати это вроде после 20.8 в 21.3 должно было починиться -
метадату в зад вернуть чтобы ZK не ругался
-
в ZK никакую метадату править не стоит
-
да точно, спасибо
-
Привет!
А можно как-то чекнуть, видит ли КХ всех ЗК? -
>>DB::Exception: Directory for table data data/ааа exists
убрал папку.
Replica /clickhouse/xxx/replicas/10.10.5.41 already exists.
удалять что ли -
-
-
>кстати это вроде после 20.8 в 21.3 должно было починиться
помню тут мелькало, но не помню чтобы оно чинилось. поменяли порядок загрузки? тикет есть? -
optimize нельзя отменить kill query.
если не replicated , то system stop merges табл
если replicated надо в ZK удалять и system restart replica табли -
sampling очень сложная тема. Надо ее планировать до создания таблицы. Проблема даже не в том какой индекс уже задан, проблема вообще понять какой индекс возможен чтобы и семплинг работал.
-
Накидал объяснение https://kb.altinity.com/altinity-kb-queries-and-syntax/sampling-exampleSampling Example
Clickhouse table sampling example
-
фиксирует. SELECT запоминает активные парты до начала выполнения и увеличивает у них ref_cnt +1 , поэтому до конца селекта они будут существовать.
-
SELECT запоминает активные парты до начала выполнения и увеличивает у них ref_cnt +1 , поэтому до конца селекта они будут существовать.
-
да
-
Distributed таблица умеет не ходить в отстающие реплики
SELECT *
FROM system.settings
WHERE name = 'max_replica_delay_for_distributed_queries'
┌─name──────────────────────────────────────┬─value─┬─changed─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─min──┬─max──┬─readonly─┬─type───┐
│ max_replica_delay_for_distributed_queries │ 300 │ 0 │ If set, distributed queries of Replicated tables will choose servers with replication delay in seconds less than the specified value (not inclusive). Zero means do not take delay into account. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
└───────────────────────────────────────────┴───────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────┴──────┴──────────┴────────┘