- 20 September 2021 (206 messages)
-
DROP TABLE ... SYNC
надо делать -
ENGINE = ReplicatedReplacingMergeTree
-
-
нет
мы про
SELECT engine, name FROM system.databases -
такое же может быть и без атомик
создать replicated таблицу, удалить, поменять структуру, попробовать ещё раз создать с тем же путём в зк -
Вот такая трабла у меня и происходит
-
да, вы правы, спасибо!
т.е. по факту похоже что я где-то много пишу с одним и тем-же значением adroom_id
пойду смотреть -
просто путь в ЗК поменять самый просто вариант
/clickhouse/tables/{shard}/{cluster}/test_database_sharded_v2 -
Добрый день. Впервые сталкиваюсь с CH, как добавить пользователя через SQL? Читаю документацию, выполняю CREATE USER..., получаю:
CREATE USER john DEFAULT ROLE ALL;
Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 37: USER john DEFAULT ROLE ALL;. Expected one of: DATABASE, TEMPORARY, TABLE, MATERIALIZED, VIEW, LIVE, OR REPLACE, DICTIONARY (version 19.17.5.18 (official build)) -
Секунду, щас гляну
-
функциональность RBAC через SQL добавлена в 20.5
https://altinity.com/blog/goodbye-xml-hello-sql-clickhouse-user-management-goes-pro
вы используете версию ClickHouse которой больше 2х лет
и она уже не поддерживается
а документацию смотрите на master ветку ;)Goodbye XML, hello SQL! ClickHouse User Management Goes ProAccess control is one of the essential features of database management. ClickHouse now offers enterprise-class user management that integrates smoothly with role-based access control. Best of all, it's all SQL!
-
Спасибо. А документация для старых версий сохранилась, доступна?
-
ClickHouse/docs/ru at 19.17 · ClickHouse/ClickHouse
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
-
Добрый день, используя clickhouse-client версии 18.16.1 пытаюсь вычитать записи из таблички (взял запрос из документации https://clickhouse.tech/docs/ru/interfaces/formats/#protobuf), но получаю:
ft-clickhouse :) SELECT * FROM dsp_cnt FORMAT Protobuf SETTINGS format_schema = 'rows:DspCntRow'
Syntax error: failed at position 30:
SELECT * FROM dsp_cnt FORMAT Protobuf SETTINGS format_schema = 'rows:DspCntRow'
Expected identifier
(ошибка подсвечивается на слове "Protobuf")
Запрос 1 в 1 как в документации, файлик со схемой на месте. Может какие пакеты к клиенту нужно докачать?Форматы входных и выходных данных | Документация ClickHouseФорматы входных и выходных данных ClickHouse может принимать (INSERT) и отдавать (SELECT) данные в различных форматах. П
-
Нормально
-
-
-
-
-
может кому будет полезно
в новой версии кликхаус стал выплевывать ошибку при селекте. MergeTree
Explicitly specified names of tuple elements cannot start with digit
после инсерта большого кол-ва записей(на наших данных до 12тыс строк ок, после - проблема, но у нас в строках большие массивы в этом поле field.1)
проблема оказалась в нейминге поля, такого плана: field.1
странно, что запрета на создание таких полей не ввели. -
в новых версиях clickhouse оно по умолчанию для новых БД
см. default_database_engine -
Понял, спс
-
Доброго дня! Кластер на 4 ноды, версия 21.3.3. Решил ради интереса включить DDL и на условно пустой таблице поэкспериментировал с ALTER-ами на модификацию колонок. В итоге вышло странное - в ditributed таблице колонки поменялись, при этом в шардах нет. И в таком состоянии всё залипло с двумя висящими тасками в очереди:
Row 1:
──────
name: query-0000000002
value: version: 1
query: ALTER TABLE distributed.applications ON CLUSTER stat MODIFY COLUMN updated_time Nullable(DateTime)
hosts: ['clickhouse1:9000','clickhouse3:9000','clickhouse1:9000','clickhouse3:9000','clickhouse2:9000','clickhouse4:9000','clickhouse2:9000','clickhouse4:9000']
initiator: clickhouse1:9000
czxid: 4615973267
mzxid: 4615973267
ctime: 2021-09-09 16:45:43
mtime: 2021-09-09 16:45:43
version: 0
cversion: 2
aversion: 0
ephemeralOwner: 0
dataLength: 433
numChildren: 2
pzxid: 4615973268
path: /clickhouse/task_queue/ddl
При этом в самой таске все 4 ноды обозначены как "finished"
┌─name─────┬─success_nodes─┐
│ active │ 0 │
│ finished │ 4 │
└──────────┴───────────────┘
Вопроса два.
1) чем могло быть вызвано такое поведение?
2) как правильно очистить очередь ddl? Через zookeeper или в клике есть свой функционал для этого?
P.S. вменяемого мануала или разобранного кейса на данную тему не нашёл в интернете. Также, немного странно что параметр <task_max_lifetime>86400</task_max_lifetime> не сработал и таски висели и спустя сутки, и спустя неделю. -
поясните
вы делали изменение структуры distributed.applications
а ожидали что изменится еще что-то кроме нее? -
Ну, видимо, наивно ожидал что изменения коснутся и реплицируемых таблиц в шардах. Как вообще правильно поступать в таких случаях?
До этого была допотопная версия без данного функционала, так что с ним сталкиваюсь впервые. -
Добрый день! Вопрос наверняка простой, но гугление дало мало результата.
Есть таблица MergeTree, и пара запросов с count().
SELECT count() FROM vpp.forecast_results
WHERE a = 'forecast' AND
b = '2021-03-28 00:00:00' AND
c = '2021-03-28 00:15:00' AND
d = '2021-03-24 01:15:00';
SELECT a, b, c, d, count() FROM vpp.forecast_results
WHERE toYYYYMM(b) = '202103'
GROUP BY a, b, c, d HAVING count() > 1
ORDER BY a, b, c, d;
Первый возвращает результат 1, во втором строка, соответствующая конкретным параметрам из первого, отображается с результатом 2. -
В чём может быть проблема с count() во втором запросе?
-
https://www.businessinsider.com/clickhouse-creators-raise-50-million-for-new-company-2021-9
Volpi learned that most of the engineers who built ClickHouse were still working for Milovidov at Yandex. They hatched a plan to purchase the rights to ClickHouse from Yandex and move a chunk of the team to a new headquarters in Amsterdam. Finally, they recruited Aaron Katz, a former Elastic and Salesforce executive to serve as ClickHouse's CEO and ex-Google engineering VP Yury Izrailevsky as ClickHouse's president overseeing product.The creators of the popular ClickHouse project just raised $50 million from Index and Benchmark to form a company that will take on Splunk and Druid in the white-hot data spaceClickHouse was created 10 years ago and is already used by firms like Uber, eBay, and CloudFlare. Now, it's building a business around the product.
-
а где глянуть как считается доступное место под резервирование?
statfs("/var/lib/clickhouse/data/", {f_type=EXT2_SUPER_MAGIC, f_bsize=4096, f_blocks=180357886, f_bfree=5419732, f_bavail=3580636, f_files=45875200, f_ffree=45445507, f_fsid={val=[950835380, 537088416]}, f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0
clock_gettime(CLOCK_REALTIME, {tv_sec=1632134247, tv_nsec=537240006}) = 0
getpid() = 1166
lseek(42, 0, SEEK_CUR) = 1320789
write(42, "2021.09.20 10:37:27.537407 [ 1293 ] {} <Debug> DiskLocal: Reserving 53.06 MiB on disk `default`, having unreserved 3.16 GiB.\n", 125) = 125 -
ClickHouse теперь перестанет быть open-source и станет платным :)?
-
хз, тот который есть наверное нет, но тот облачный продукт кто знает
https://clickhouse.com/blog/en/2021/clickhouse-inc/ -
Очень интересно. Ну что ж, будем следить!
-
Всем привет.
Есть задача наложить фильтры из mysql на данные из clickhouse.
Имеем таблицу mysql с 5 колонками. Каждая колонка содержит какое-то значение, либо null - т.е. любое
Пример данных
col1, col2, col3, col4, col5
11, null, null, null, null -- т.е. главное что бы col=11
null, 11, 11, null ,null -- т.е. col2=11 and col3=11
Так же в кликхаусе данные, с такими же 5 колонками.
Нужен какой-то запрос, который позволит наложить данные mysql на данные кликхаус.
По идее, эта задача решается запросом:
SELECT *
FROM CH.table ch
LEFT JOIN MYSQL.table m
ON
(ch.col1=m.col1 or m.col1 is NULL)
AND
(ch.col2=m.col2 or m.col2 is NULL)
AND
(ch.col3=m.col2 or m.col3 is NULL)
AND
(ch.col4=m.col2 or m.col4 is NULL)
AND
(ch.col5=m.col2 or m.col5 is NULL)
Но кликхаус версии 21.4.5.46 говорит
[2021-09-20 15:56:15] Code: 48, e.displayText() = DB::Exception: JOIN ON does not support OR. Unexpected '(m.col1 = col1) OR (m.col1 IN (NULL))': While processing (m.col1 = col1) OR (m.col1 IN (NULL)) (version 21.4.5.46 (official build))
Пробовали словарем, но получается очень страшная конструкция с перемножением всех вариантов(порядка ).
Подскажите, плиз, никто ли не сталкивался с такой проблемой и как ее средствами КХ можно решить? -
=) ну как правильно...
добавляете в Underlying *MergeTree потом добавляете в Distributed
транзакций нет
Distributed данные сам по себе не хранит (ну временные есть данные, если вставляете в Distributed)
так что менять имеет смысл в *MergeTree -
Сам спросил - сам ответил. Данные были импортированы из MySQL через движок таблицы. В процессе импорта некоректно обработался переход на летнее время для европейского региона CET/CEST. Из-за этого произошло наложение временных диапазонов в итоговой таблице. Единичный запрос не возвращал несколько строк на одни временные координаты, потому что GUI клиент делал прозрачную трансформацию часового пояса для дат запроса и выборка шла не по тому диапазону, где была проблема.
-
спасибо, подошло!
-
Всем привет. Подскажите, пожалуйста, есть ли какой нибудь еще вариант получения списка привелегий выданных для роли, кроме как show grants for %role% ?
-
следите за обновлениями
https://github.com/ClickHouse/ClickHouse/pull/21320
ну вообще у вас вроде обычный dictGet запрос должен работать
SELECT * ,
dictGetOrDefault('mysql_dict_by_col1','col1',tuple(ch.col1),NULL) AS filter1,
dictGetOrDefault('mysql_dict_by_col2','col2',tuple(ch.col2),NULL) AS filter2
FROM CH.table ch
WHERE (filter1 IS NOT NULL)
OR
(filter2 IS NOT NULL)
но выглядит как то странно ... почему у вас left join ?
он фактически ничего не выберет"OR" operator in "ON" section for join by ilejn · Pull Request #21320 · 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...
-
Смотрите, в mysql может быть такие данные
col1, col2
111, null
222, 333
В в клихаусе допустим
col1, col2
111, 222 —- подходит под 111, null
222, 111 — не подходит, ни под 111, null, ни под 222, 333 -
Как это соотносится с Altinity? Я думал, что Altinity - это уже и есть коммерческий форк 🙂
-
никак не относится, это просто конкурент Альтинити.
У Альтинити нет коммерческих форков, все что делает Альтинити в кодовой базе КХ публично доступно бинарно и в сорцах.
У Альтинити закрытый код только по управлению облачного КХ. Там обычный КХ (любой на ваш выбор) в КХ Операторе.
Оператор тоже открыт полностью -
Понятно, спасибо.
-
ну, можно в /var/lib/clickhouse/access/*.sql файлы посмотреть еще, но такое себе...
а что вас в show grants не устраивает? -
Интересует возможная альтернатива) Задача показать на интрефейсе текущий уровень доступа роли, в целом формат понятен, но про альтернативу решил спросить.
Спасибо! -
распарсить SHOW GRANTS
самый прямой путь -
чет только платный доступ =(
-
в firefox два раза нажать reader mode
-
ещё в Telegram можно нажать INSTANT VIEW под превью
-
Рекомендую http://archive.is , для всего работает обычноLink
create a copy of a webpage that will always be up
-
Привет. Подскажите, пожалуйста, есть ли возможность при создании словаря через sql-запрос указать авторизацию через ldap?
SOURCE(CLICKHOUSE(
host 'example01-01-1'
port 9000
user '<user>'
password '<ldap-server>'
db 'default'
table 'ids'
where 'id=10'
secure 1
));
Типа такого? -
-
-
Introducing ClickHouse, Inc.
https://clickhouse.com/blog/en/2021/clickhouse-inc/ -
None
-
-
А нам завезли
-
хорошо вам
-
У меня тоже не имеется пока :(
-
cloudflare еще не заклаудил везде
-
-
смешно, но да, тоже самое с adguard. видимо click не нравится :)
-
🚀
-
arrayDifference(groupArray(toUInt32(event_time))) - так получите время между соседними событиями
-
-
-
Наконец-то)
-
А когда-то было по другому?
-
они нам ответили, что уже убрали нас, но надо обновить список правил
-
можно быыло просто ребрендинг сделать slickhouse =)
-
ну до этого не было как таковой энтерпрайз версии и все фичи шли всем
-
Ну так я про то же. Как только появляются деньги на горизонте - стратегия меняется.
-
-
-
https://github.com/ClickHouse/ClickHouse/issues/18282 https://github.com/ClickHouse/ClickHouse/pull/27537#event-5309244279Asynchronous INSERTs mode · Issue #18282 · ClickHouse/ClickHouse
Use case Thousands of clients concurrently sending data to clickhouse-server for insertion. Every client sending a small batch of data but the total traffic can be large. This scenario is popular f...
-
и зукипер будет не нужен
-
-
Уже есть
-
-
-
-
Кстати о зукипере.
У нас снова начались проблемы с ЗК (было такое с полгода назад - прошло само) - на одной из двух схожих систем время от времени начинают массово сыпаться ошибки ZooKeeper session has been expired при запросах к ReplicatedMT таблицам. Девопсы грешат на накренившуюся базу ЗК, хотят переустановить ЗК с нуля.
Есть какая-нибудь инструкция по минимизации урона кластеру КХ при переустановке ЗК? -
Что подразумевается под переустановкой с нуля?
-
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-zookeeper/altinity-kb-zookeeper-cluster-migration/
Если переезд на другие машинки, то можно это посмотреть -
Какой размер базы зк
-
Пересоздать виртуалку и заново поставить на неё ЗК.
-
Ок, ну смотрите этот гайд
-
Я могу посмотреть это из КХ? У меня нет доступа к серверу ЗК.
-
Нет, нельзя
-
840мб
-
Маленькая
-
Смотрите в логи зк ищите что то вроде, zxid rollover
-
-
Спасибо, поищем!
-
Да и вообще перевыборы лидера и что было до этого в зк
-
Появилась такая же проблема пару лет назад, периодически отваливался ЗК, особенно в ЧНН. Где-то выше писали что проблема может быть связана со сбросом кеша на диск (у нас массив HDD) . Установили sysctl примерно на
vm.dirty_background_bytes = 52428800
vm.dirty_bytes = 1073741824
и проблема ушла. Конечно она проявлятся, но очень редко, раз в несколько месяцев может отвалиться, при большой пачке тяжелых запросов.
Характерной чертой до тюнинга было в то время, как отваливался ЗК в dmesg на севере с кликом
[ 2587.885779] perf: interrupt took too long (2509 > 2500), lowering kernel.perf_event_max_sample_rate to 79000 -
Это искали, но ничего не нашли.
-
Спасибо! Попробуем.
-
Особенно заметно в системах с большим кол-вом ОЗУ, размер кеша по дефолту почти весь кеш находится в ОЗУ, 80% макс вроде, и когда 200-300гб одним разом пытаются записаться на диски, система может даже колом вставать и на консоль не реагировать в отдельных случаях.
То есть отваливается не ЗК а отваливается клик, он не отвечает на пинг от ЗК, и ЗК рвет коннект, судя по логам того же ЗК. -
А это вы диски ЗК или КХ тюнили?
-
КХ
-
Понял, спасибо.
-
Интересно, что реализовано что-то схожее с kittenhouse в режиме реверс-прокси (https://github.com/VKCOM/kittenhouse/blob/master/core/clickhouse/reverse.go), но на C++ дифф совершенно огромный по сравнению с Go, хотя и производительность вероятно чуть выше, и больше гибкости.kittenhouse/reverse.go at master · VKCOM/kittenhouse
Contribute to VKCOM/kittenhouse development by creating an account on GitHub.
-
Тут скорее важно, что поддерживаться будет лучше чем киттенхаус
-
Кстати я точно знаю, что внутри VK киттенхаус дальше развивается, но как-то бывшие коллеги забывают его выкладывать в опенсорс :). Впрочем, я только за то, чтобы группировка мелких инсертов была на стороне самого ClickHouse, особенно если это решение действительно будет позволять делать так, чтобы ошибки парсинга с конкретного хоста не влияли на все остальные.
-
Интересно сколько разница по производительности в граммах конечно и стоит ли оно того
-
kittenhouse в режиме reverse proxy (тот файл, что я прислал и есть по сути все его исходники) несколько сотен тысяч строк в секунду может вставлять. Больше я не проверял, это уже было несколько гигабит в секунду :).
-
В PR, представленном выше, заявлена скорость в 2 млн строк в секунду, но там утверждается, что делается один memcpy, поэтому оно наверняка в несколько раз эффективнее kittenhouse только по этой причине.
-
Уже. Но пробовать страшно
-
Изменение типа столбца MODIFY COLUMN [IF EXISTS] name [type]
Подскажите, если у столбца уже используется тип [type], и не смотря на это мы выполняем запрос MODIFY COLUMN [IF EXISTS] name [type] ([type] - тот же), то реально ClickHouse будет выполнять какие-либо действия? Нужно ли (и если нужно, то как правильно?) перед выполнением такого запроса самому проверять, не пытаешься ли изменить тип столбца на тот же самый? -
если тип такой-же то на диске делать ничего не будет.
А зачем это надо? любой alter меняет метаданные и это плохо
alter add column if not exists для колонки которая существует -- тоже лучше не делать -
Добрый день, возник ряд вопросов в связи с этой новостью.
1. Каков юридический адрес компании?
2. Компания будет заниматься только enterprise решениями или же она будет owner’ом и основного кода?
Нам просто очень важно в некоторых случаях не «российское» происхождение софта. -
а у КХ было российское происхождение? де юре? де факто было не российское
-
Так везде висел шильдик Яндекса а в глазах руководства и заказчиков это = Россия
-
В общем обособленная компания зарегистрированная лучше всего в Штатах это прям бальзам на душу)
-
Реестр российского ПО пополнился СУБД ClickHouse и «Яндекс.Трекером»
Компания «Яндекс» сообщила о включении в реестр отечественного программного обеспечения сервиса для организации работы команды «Яндекс.Трекер» и системы управления базами данных ClickHouse. Теперь эти продукты будут иметь приоритет при выборе софта для государственных организаций.
-
да, в Delaware
-
Найс 😊А владелец кода кто теперь?
-
Тоже Clickhouse inc?
-
Copyrights переданы, да
-
Change copyright by tigrankhudaverdyan · Pull Request #29198 · ClickHouse/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): Documentation (changelog entry is not required)
-
👍🏻👍🏻👍🏻
-
Ок, спасибо, учту. Зачем это надо - возник вопрос, можно ли сделать миграцию на новую версию и увеличить размер типа: скажем, вместо Int8 использовать Int32 в одном столбце. При этом, миграцию неполноценную - чтобы не хранить в доп. таблице версию последней примененной миграции, а просто сделать запрос многократно применяемым, что-то вроде:
CREATE DATABASE IF NOT EXISTS test_database
CREATE TABLE IF NOT EXISTS test_database.baseline_table (a Int8, b Int8) ENGINE = MergeTree() ORDER BY (a)
ALTER TABLE test_database.baseline_table MODIFY COLUMN b Int32 -
ничего не понял.
b Int8
...
ALTER TABLE test_database.baseline_table MODIFY COLUMN b Int32
в этом случае будет перезаписаны файлы столбца на диске
ALTER TABLE test_database.baseline_table MODIFY COLUMN b Int32
ALTER TABLE test_database.baseline_table MODIFY COLUMN b Int32
ALTER TABLE test_database.baseline_table MODIFY COLUMN b Int32
ALTER TABLE test_database.baseline_table MODIFY COLUMN b Int32
так лучше не делать -
Да, всё верно. Что произойдет при повторном выполнении этой миграции?
-
будут конкретные проблемы
-
Да, ок, спасибо
-
Большое кол-во альтеров ведет к "Metadata on replica is not up to date with common metadata in Zookeeper"
-
Надо делать как можно меньше альтеров (все старатся запихать в один) и никогда не делать подряд несколько не дождавшись завершения на всех репликах
-
Особенно если используется on cluster
-
-
если послать два alter на разные реплики одновременно будет столкновение.
-
вот сегодня спросили например https://stackoverflow.com/questions/69257245/clickhouse-cannot-alter-columns-throws-dbexception-metadata-on-replica-is-notClickhouse cannot alter columns throws DB::Exception: Metadata on replica is not up to date with common metadata in Zookeeper
I have a replicated merge tree table on two nodes I have two columns as client_port and server_port Int16, I want to change it to UInt16. There is currently alot of data in this table (somewhere ar...
-
On running these queries one by one,
Alter table events_db.events_local_tables ON cluster click_cluster modify COLUMN client_port UInt16
Alter table events_db.events_local_tables ON cluster click_cluster modify COLUMN server_port UInt16 -
Добрый вечер! Вопрос есть: сейчас на кх реально хранилище построить? Всякие дата волт. Join умеет, update умеет, витрины умеет
Etl на dagster -
а дата вольт на колоночной базе это не извращение?
-
я про производительность джойнов
-
в том смысле что вы думаете про "Join умеет, update умеет" -- не умеет. Нельзя вот просто там взять и сджойнить 20 таблиц в одном запросе. И update одной строчки длящийся часов 12 вас тоже удивит, при этом еще апдейт распакует пару ТБ, запакует и запишет на диск.
- 21 September 2021 (161 messages)
-
Привет. Подскажите.
Если я переопределяю конфиг параметры в config.d, users.d нужен ли рестарт clickhouse? или через некоторое время новые значения подхватятся и рестарт не нужен?
Если правильно понимаю не все параметры можно переопределить в config.d, users.d? Нет ли где-то такого списка? -
Всем доброго дня! Вопрос про то как CH работает с DateTime и временными зонами: у нас есть данные за 2014 год и CH их сдвигает на 1 час, так как в то время наша таймзона отличалась на 1час от того что сейчас. Кто-нибудь сталкивался с такой проблемой? Как боролись? Если возможность как-то чтобы в поле DateTime не учитывалась таймзона? Подскажите как этого добится?
-
Спасибо, а есть планы по оптимизации? Или кх двигается в другом направлении?
-
Всем привет.
1. Подскажите пожалуйста, как должен выглядеть запрос который выведет результат с условием LIKE %подстрокапоиска% пробежавший по всем строкам таблицы. Существую ли вообще такие варрианты
2. Умеет ли Clickhouse парсить json если в таблице есть поле с наполнением текста формата JSON и в дальнейшем выполнять понотекстовый поиск по нему
В общем есть у меня elk с прикрученным на него logtrail но в нём есть один большой минус это объёмы, кто работал в нём может сразу скажете можно аналог реализовать на clickhouse или стоит забыть про него ) -
1. match() - поиск по regexp. select top 10 * from table where match(args,'подстрокапоиска')
-
Ну еще на IPO осталось выйти)
-
Была попытка строить обратные индексы и делать адаптер под кибану, но не полетело. Гуглить kibouse
-
2. Я бы наверное преобразовал JSON в массив если это возможно и функциями высшего порядка парсил массивы
-
-
1. regex functions
2. вам с этим не к КХ -
У Альтинити есть про обработку логов https://altinity.com/presentations/a-practical-introduction-to-handling-log-data-in-clickhouse . Рекомендуемый подход - сначала все в JSON как есть, потом по мере необходимости перекладывать в отдельные колонки.Webinar Slides. A Practical Introduction to Handling Log Data in ClickHouse
By Robert Hodges and Altinity Engineering TeamSlides for the Webinar, presented on Dec 17, 2019 Webinar recording is available hereLog messages are one of the most important types of application data. ClickHouse is very good at storing log data; many SaaS applications use it under the covers. In this webinar we will show examples of different application logs and how to design tables to store them. Options include using typed columns, strings, JSON, or key-value pair arrays. We'll also discuss how materialized columns to improve filter speed, as well as techniques to tune index granularity for wide rows. This is the first in a series of webinars on log management. Future webinars will cover tools to load data as well as techniques to retrieve log information efficiently.
-
вариантов пара
стриминга в realtime нет
1) через экспорт bigquery -> google cloud storage https://cloud.google.com/bigquery/docs/exporting-data -> загрузка через table functions s3 или s3cluster через INSERT INTO ... SELECT ... WHERE условия для дельты https://clickhouse.com/docs/en/sql-reference/table-functions/s3/
можно даже в MergeTree не ч грузить =) но медленно
2) точно также зная дельту (по времени например или по uint64 snowflake id какому нибудь) ODBC / JDBC через https://cloud.google.com/bigquery/docs/reference/odbc-jdbc-drivers и через https://clickhouse.com/docs/en/sql-reference/table-functions/odbc/
и https://clickhouse.com/docs/en/sql-reference/table-functions/jdbc/ -
спасибо
-
благодарю но я не понял как по всем строкам, тут в качестве args имя строки верно?
пример
у меня экспортируется таблица с тремя колонками
id, name, simpleValue
Требуется найти все строки где в колонках есть совпадения с "%temp%" (в SQL это бы выглядело типа (Where name like '%temp%' or simpleValue like '%temp%' и т.д) -
Всем привет! Подскажите пожалуйста, можно ли откатить версию с 21.8 на 21.7 и если да то как правильно?
-
Подскажите плиз.
С какой версии возможно реализовано создание функций в Клике?
У меня version 21.3.9.83 (official build))
При попытке создать функцию:
CREATE FUNCTION test_function AS (a, b) -> a * b;
выскакивает ошибка:
Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 8 ('FUNCTION'): FUNCTION test_function AS (a, b) -> a * b. Expected one of: VIEW, LIVE, DATABASE, USER, PROFILE, TEMPORARY, TABLE, ROW POLICY, POLICY, DICTIONARY, QUOTA, OR REPLACE, ROLE, SETTINGS PROFILE, MATERIALIZED -
SELECT id FROM table WHERE match(name, 'temp') OR match(simpleValue,'temp')
-
это в master
и в 21.10 testing только заехало, свежий и толком не анонсированный функционал -
Спасибо🙏
-
select id,name from table where match(name,'temp') or match(simpleValue,'temp')
-
Всем привет, подскажите пожалуйста, есть какие-то подводные камни при шардировании с ключем шардирования rand() ?
-
Добрый день, подскажите как можно с другого клика выгрузить данные. Грузили native формате через clickhouse-client по дням в таблицу Mergetree тоже по дням партиционированную. Загрузка иногда обрывается с падение клика по oom в произвольные моменты времени. Лимиты по пользователю стоят. Может быть падения связаны с какими-нибудь оптимизационными процессами в клике и использования памяти, которая не считается в лимитах? типа того Engines in the MergeTree family are designed for inserting a very large amount of data into a table. The data is quickly written to the table part by part, then rules are applied for merging the parts in the background. И как это можно обойти или донастроить?
-
-
Зачем таскать данные через клиента, если можно передать их с сервера на сервер. Пробовали такой вариант?
-
может я не догоняю, но у нас там тунелирование через другой сервер и все через ssh.
-
у нас сейчас однонодная конфигурация, раньше был кластер и подключали другой клик как доп кластер и с него успешно таскали данные
-
спасибо разобрался )
-
Всем привет. Подскажите Clickhouse-keeper так же должно быть 2n+1 экземпляров?
-
-
Коллеги, никто не знает камней? :)
-
Например, дубликаты будут лететь на разные сервера и не схлопываться даже через select final
-
зависит от ваших запросов, если простенькие агрегации то всё будет хорошо работать. Когда понадобятся join / in вдруг окажется что надо использовать global и всё начнёт тормозить. select final / optimize deduplicate не будут нормально работать
из плюсов это то что место на диск равномерно заполняется -
Добрый день! пытаюсь делать бэкап КХ по доке https://github.com/AlexAkulov/clickhouse-backup , но бэкапятся только метадаты таблиц. Данные не бэкапятся. Не подсакжете в чем может быть проблема? КХ версии 21.7.7.47 в докере.GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
Tool for easy ClickHouse backup and restore with cloud storages support - GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
-
Ага, спасибо. Передадим эти минусы нашим аналитикам)
-
INSERT INTO ... SELECT .. FROM remote()
пробовали? -
какой движок у таблиц?
бекап делается только для *MergeTree таблиц -
движки у таблиц *MergeTree
-
LOG_LEVEL=debug clickhouse-backup create backup_name
показывает что ALTER TABLE ... FREEZE WITH name
запускается? -
да, показывает
-
clickhouse-backup тоже в докере?
в соседнем контейнере или внутри контейнера с clickhouse-backup?
/var/lib/clickhouse
в volume вынесена? -
clickhouse-backup - бинарь на сервере не в контейнере, /var/lib/clickhouse вынесена у контейнера clichouse-server
-
так, в volume в /var/lib/clickhouse/backup/backup_name/shadow папка есть?
-
/etc/clickhouse-backup/config.yaml на хосте есть?
как выглядит? -
папки shadow нету, есть только папка metadata и файл metadata.json
-
general:
remote_storage: s3
max_file_size: 1099511627776
disable_progress_bar: false
backups_to_keep_local: 0
backups_to_keep_remote: 0
log_level: info
allow_empty_backups: false
clickhouse:
username: guest
password: "guest"
host: 192.168.100.8
port: 9000
disk_mapping: {}
skip_tables:
- system.*
timeout: 5m
freeze_by_part: false
secure: false
skip_verify: false
sync_replicated_tables: true
skip_sync_replica_timeouts: true
log_sql_queries: false -
-
Ура. Появляется надежда, что появится нормальный человечий коннектор от вендора для табло, а не вот это гавно как сейчас
-
clickhouse-backup --version ?
очень странно, можете через pastebin расшарить LOG_LEVEL=debug clickhouse-backup create backup? -
Ошибка возникает при смене dicGet на dictGetFloat64.
-
-
я понял в чем причина: clickhouse-backup и clickhose-server должны смотреть на одну и ту же папку /var/lib/clickhouse
у меня у clickhouse-server /var/lib/clickhouse/ примаучена к /data/clickhiouse/database хоста
поэтому возникает такой вопрос:
1. можно ли папку для clickhouse-backup поменять(сделать не /var/lib/clickhouse)?
2. получается мы не сможем делать бэкапы удаленно с другого хоста? -
1. можно, но это должно быть точно такое же блочное устройство, не стоит так делать
2. можно запустить clickhouse-backup server с включенной опцией API_CREATE_INTEGRATION_TABLES=1 и триггернуть через вызов INSERT INTO system.backup_actions -
почему считаете что именно system.dictionaries нужен?
там есть отдельные права на dictGet
https://clickhouse.com/docs/en/sql-reference/statements/grant/#grant-dictget -
здорово! спасибо большое! очень помогло
-
но сам clickhouse-backup server должен иметь возможность конектиться к clickhouse и при этом иметь доступ к диску /var/lib/clickhouse внутри clickhouse
-
Спасибо огромное!
-
Попытаю счастья ещё.
-
буду пробывать, еще раз спасибо
-
авторизация через ldap настраивается на clickhouse-server который example01
https://clickhouse.com/docs/en/operations/external-authenticators/ldap/
она все равно парольная -
То есть в любом случае при создании словарей нужно явно указывать пароль? Даже задать с хешем никак не выйдет?
password_sha256_hex или password_double_sha1_hex. -
ну есть более глобальная задача по менеджменту секретов
https://github.com/ClickHouse/ClickHouse/issues/22471Explicit secret management in ClickHouse · Issue #22471 · ClickHouse/ClickHouseUse case Passwords/connection data scattered in different parts of the system is difficult/impossible to reuse in other contexts, which is why the same connection data can appear repeatedly in diff...
-
Видимо нет. Тред интересный. Спасибо за ответ.
-
подскажите бывает так что CH не подтягивает конфиги
у меня не подтягивает макросы -
-
<?xml version="1.0"?>
<yandex>
<clickhouse_remote_servers>
<local>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host></host>
<port>9000</port>
</replica>
<replica>
<host></host>
<port>9000</port>
</replica>
</shard>
</local>
</clickhouse_remote_servers>
<zookeeper-servers>
<node index="1">
<host></host>
<port>2181</port>
</node>
</zookeeper-servers>
<macros>
<cluster>local</cluster>
<replica>IP</replica>
<shard>01</shard>
</macros>
</yandex> -
Здравствуйте. Работаю с CH не так давно, поэтому не пинайте)
Есть такой вопрос - есть таблица с PARTITION BY (toQuarter(created_at), toYYYYMM(created_at)). Нужно поменять на PARTITION BY (toQuarter(collected_on), toYYYYMM(collected_on)).
Как это лучше сделать? Создавать новую таблицу с переносом данных? -
Это единственный вариант
-
clickhouse-server перезапускали?
-
канечно
-
спасибо!
-
вроде пару месяцев назад мы релизили новую версию конектора и она сильно лучше?
-
а в какой папке у вас XML с макросами? в /etc/clickouse-server/users.d или config.d ?
для надежности можно в /etc/clickhouse-server/conf.d класить
смотрите в /var/lib/clickhouse/preprocessed_configs/config.xml
на результат того что получилось после объединения -
А зачем у вас там toQuarter и toYYYYMM на одно и то же поле? Кажется что хватило бы второго
-
=) вы вот это пробовали?
https://github.com/Altinity/clickhouse-tableau-connector-odbc
если не работает issue заводили?GitHub - Altinity/clickhouse-tableau-connector-odbc: Tableau connector to ClickHouse using ODBC driverTableau connector to ClickHouse using ODBC driver. Contribute to Altinity/clickhouse-tableau-connector-odbc development by creating an account on GitHub.
-
Пока не обновляли. Можно где-то changelog посмотреть про этот коннектор?
-
макросы не видит
ch1.8616a0fdc182dc727996fa1e99aed405 :) select * from system.macros
SELECT *
FROM system.macros
Query id: b45cc0b9-1196-421e-a6c6-63f2afbcddf7
Ok.
0 rows in set. Elapsed: 0.003 sec. -
серверные конфиги требуют рестарта, https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-server-config-files/#settings--restartServer config files
How to manage server config files in Clickhouse
-
вы не ответили на мой вопрос, я понимаю что макросы не видит
но не видит потому что либо не туда положили конфиг
либо конфиг не правильный
либо нужен рестарт после обновления настроек и на лету они не подтягиваются (типа tcp_port например) -
нету changelog. Там сильно улучшено.
-
Отлично. Тогда оьязательно попробуем!
-
Спасибо
-
старый способ был через generic odbc connector табло который поверх ODBC драйвера и ничего про его особенности не знает...
новый способ специализированный коннектор поверх odbc драйвера который уже много чего умеет и знает
будем признательны за feedback -
Последнее обновление 28 июля. Мы 27го пробовали и че-то там не полетело)
-
согласен, спасибо!
-
odbc драйвер тот же с оф. репы КХ и компилировать по той же инструкции?
-
-
баланс? Чта?
-
-
в replication_queue написано в общем-то все что нужно для понимания.
в replication_queue все задания и те которые выполняются и те которые нет.
покажите
SELECT
database,
table,
type,
any(last_exception),
any(postpone_reason),
min(create_time),
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 -
у меня же пароля к тому клику, у меня ключ лежит на моем сервере клика и оттуда я клиентом данные перетаскиваю. Но ладно сейчас попробую в соседнюю табличку
-
сколько памяти у сервера?
и сколько полей в таблице -
-
-
что в 3м и 4м полях?
-
какая версия КХ ?
-
-
надо смотреть почему не успевают 8 ниток фетчить, возможно надо увеличить background_fetches_pool_size
либо сеть узкая, надо смотреть на загрузку сети
либо не успевает другой КХ отдать, потому что у него диск загружен уже на 100% -
Да, мы ограничили сеть, так как io диска забивался
-
-
Спасибо!
-
да, можно
-
Задайте пожалуйста направление
-
storage_policy
-
т.е. вы задушили сеть и спрашиваете почему репликация не успевает? srsly?
-
Up
Denny, не могли бы подсказать? -
я не понял вопрос,
ping сделать c сервера КХ на сервер ZK
ping сделать между всеми ZK
латенси в ZK echo stat|nc localhost 2181
Latency min/avg/max: 0/0/14844 -
124 поля , у сервера всего 138Gi, на пользователя, который грузит 60G, в клике серверная память 128G настроена, запросы были мелкие и потом писали много партишек , а потом их оптимизировали, вычитала выше про эти настройки в обсуждении --min_insert_block_size_rows=5000000000 --min_insert_block_size_bytes=10000000000000 --max_insert_block_size=100000000 - теперь 2,8G на загрузку одного дня примерно по 8 минут на 17-20 млн и грузим мы без файликов, одной командой через |
-
Я не понял что такое 'теперь 2.8'
-
На native эти параметры не влияют. Вам надо уменьшить max block size у клиента который делает select
-
ok, ping между КХ и ЗК в каких числах будет адекватным?
-
потребляет на запрос на вставку memory_usage
-
влияют, вы сами выше писали. Они накапливают по количеству и партиции нормально нарезают. И загрузка идет - но в районе месяца- ну то есть месяц выгрузили , клик падает с oom
-
вот тут про парты
-
да драйвер последний возьмите
https://github.com/ClickHouse/clickhouse-odbc/
и коннектор
https://github.com/Altinity/clickhouse-tableau-connector-odbcGitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouseODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
Меньше 50ms если частые инсерты то 15ms
-
Там решали обратную задачу.
-
Меняйте параметры у клиента который делает селекты
-
Вам нужно чтобы native блоки были меньше в строках между клиентами в пайпе
-
Какой клик падает? Покажите как оом выглядит трейс из dmesg
-
@den_crane а в чем подстава, почему не сразу отлетает клик? почему только через условно месяц загрузки , что он нам оптимизирует? или на какие ограничения я напарываюсь? будет меньше блок - просто меньше приходить будут и легче вставляться. Мы просто и спарком грузили - он помедленнее и такое ощущуние, что при накоплении критичной массы , тоже типа около месяца данных - тоже упал. Я хочу понять
-
в который пишут - приемник
-
Вы странное описываете. Падает после загрузки? Типа мержи кушают столько памяти что кх убивает oom killer?
-
спасибо)
-
вот, да, это странно, и это по наблюдениям так. Логи сейчас посмотрю, но вчера там ничего интересного не было после падения.
-
Я про dmesg. Вы что называете oom?
-
у нас виртуалка и она падает по памяти. туда доступа у меня нет. Вчера вместе смотрели, там мониторинг потребления памяти - все работало. потом стресс тестирование сделали и упала виртуалка. Но из-за нагрузки в клике, возможно
-
какая версия КХ
мониторьте память КХ, после загрузки https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-who-ate-my-memory/
for i in `seq 1 6000`; do clickhouse-client --empty_result_for_aggregation_by_empty_set=0 -q "select (select 'Merges: \
'||formatReadableSize(sum(memory_usage)) from system.merges), (select \
'Processes: '||formatReadableSize(sum(memory_usage)) from system.processes)";\
sleep 3; done -
обожаю читать треды от вопроса и до ответа. набираюсь опыта на чужих шишках. но вот тут ответ был прям вообще непредсказуем :)
-
хорошо, включила это скрипт.
21.8.4.51 -
таблицу завела. Дождаться час ХХХ и посмотреть что там было?
-
я ничего не понял, что за таблица?
я предлагал запустить bash скрипт который показывает сколько памяти потребляют мержи и процессы, (если у вас есть мониторинг то вы просто можете посмотреть там), потом запустить ваш процесс копирования и мониторить что выдается в столбике merges -
всем привет, такой вопрос
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
гарантированно воссоздаёт не только структуру но и данные таблицы name2 в table_name ? -
только структуру
-
как ни странно данные почему-то также переносятся
-
это баг ?
-
покажите полностью запрос, и реальный engine
-
это возможно для некоторых движков, но это будет view , а не таблица
-
CREATE TABLE IF NOT EXISTS name2 AS name ENGINE = MergeTree ORDER BY (created_at) PARTITION BY toYYYYMM(created_at)
-
А у вас там не ReplicatedMergeTree, случаем?
-
нет, просто MergeTree
-
я и хочу понять, если баг то лучше не буду думать что переносится с гарантией
-
это в какой версии КХ ? не может такого быть
-
а если
CREATE TABLE name2 AS name ENGINE = MergeTree ORDER BY (created_at) PARTITION BY toYYYYMM(created_at)
может у вас уже есть name2 и она просто не создается? -
нет, в том и дело что именно добавилось PARTITION, в этом вся суть этого дела
-
ну ладно, вообщем я понял что это не надёжно
-
спс
-
это просто невозможно. Ошибка у вас.
-
окей
-
AS name
тупо подставляет структуру таблицы (поля и типы) -
ну да, результаты bash скрипта вставляю в табличку и смотрю. Пока норм. Интересно, что там будет около падения
-
да, там вообще не предусмотрены подзапросы были. Поэтому там такое рандомное поведение.
-
select * from system.mutations where not is_done
-
те которые с ошибкой надо убить kill mutations
те которые не завершены надо смотреть почему.
вообще сколько у вас там mutations not is_done ? -
много причин, может они выполняются, но очень медленно
может они не выполняются потому что в пуле нету свободных ниток
возможно они блокированы мержем или другой мутацией
еще 28 вариантов, устал печатать
покажите select create_time, parts_to_do, latest_failed_part, latest_fail_time, latest_fail_reason from system.mutations where not is_done format Vertical -
таблица движок Replicated**** ?
-
толстенькая это 150 TB, у меня мутация на 150 ГБ за 30 сек идет
-
select * from system.merges format Vertical limit 3
-
elapsed: 379.449122824
progress: 0
total_size_bytes_compressed: 646973152
is_mutation: 1
у вас идут мутации, но очень медленно -
я думаю у вас просто суперслабое железо и слишком много мутаций, которые вы должны быть запустить как одну, а запустили как 1000 разных.
-
сколько строк в select * from system.merges ?
-
Да странно. Надо лог кх читать
- 22 September 2021 (128 messages)
-
Всем, привет. Может глупый вопрос, но хотелось бы узнать. Поля которые кладутся в order by при создании таблицы являются уникальными для каждой строки или нет?
-
нет
-
А как сделать определенный список полей уникальным для таблицы с движком mergetree?
-
Вам нужно делать GROUP BY
-
Или использовать ReplacingMergeTree / CollapsingMergeTree / VersionedCollapsingMergeTree или другой, все зависит от задачи
-
Или primary key?
-
Ну да, согласен
-
Для CH primary key вообще роли не играет, так как у него нет autoincrement
-
А, понял
-
Всем привет! Какие есть минусы при преобразовании типов, например из string в float, это трудоемкий процесс?
-
Всем привет и хорошего дня,
Кто работал с go-clickhouse такой вот вопрос:
нет коннекта на пред-продакшен,
вот строка запроса:
tcp://10.0.0.100:9000?username=default&password=123$n#aa,bb&database=mydb&debug=false
пытался делать urlencode - эффект тот же.
родной клиент кликхауса коннектится с таким пользователем и паролем нормально.
локально все коннектится, данные пишутся, использую докер, но пароль и пользователь не установлен
больше инфо тут https://qna.habr.com/q/1050628
бьюсь уже третий день.Почему не коннектится go-clickhouse?Ожидают ответа 1 человек. Станьте первым, кто даст ответ! Или подпишитесь на вопрос, чтобы узнать ответ, когда он появится.
-
Привет.
Переехали на новый кластер кафки и появились такие сообщения от клики.
2021.09.22 06:54:23.286877 [ 15690 ] {} <Error> StorageKafka (KAFKATABLE): [rdk:ERROR] [thrd:app]: CH_HOST-streams-KAFKATABLE#consumer-695: GroupCoordinator: 10.14.0.29:19092: ApiVersionRequest failed: Local: Timed out: probably due to broker version < 0.10 (see api.version.request configuration) (after 10008ms in state APIVERSION_QUERY, 1 identical error(s) suppressed)
подскажите, в какую чторону смотреть? -
Коллеги, добрый день! Помогите понять, как реализовано частичное удаление данных из таблицы. Delete нету же. Есть truncate, но это все и сразу.
-
Есть разные движки таблиц для этого. Ну и Delete есть. Про его нюансы можете почитать тред выше(сообщений 20-30 вверх отлистайте)
-
Спасибо!
-
Даже больше, РК не обязан быть уникальным в СН
-
по партициям можно дропать
-
Через alter table … delete where … только для таблиц с движком *mergetree, но это дорого, лучше через collapsedmergetree
-
Точно
-
Всем, привет. Пытаемся поженить кликхаус и кликсенсе. Тестовый стенд кликхауса (ram94g, 12cpu), заливаем инкремент через odbs. 57 млн записей за 15 минут кликсенсе забрал себе. Видится, что это достаточно медленно, подскажите кто-то сталкивался с оптимизацией загрузки в биай системы, как заставить кликхаус отдавать данные быстрее?
-
Увеличить пропускную способность сети... Читать параллельно (правда не знаю насколько это подходит для bi). Сделать предобработку (если грузятся результаты джойнов и т.п.).
-
Коллеги , добрый день
есть табличка
create table T
(
filed_1 int64,
field_2 date
)
partition by toYYYYMMDD(field_2)
запрос 1
select
filed_1,
field_2
from T where field_2='2021-09-22'
Processed 49 million rows ,99.2 MB
запрос 2
select
filed_1
from T where field_2='2021-09-22'
Processed 49 million rows , 496.2 MB
Вопрос такой - почему во втором случае вычитывается больший объем данных? -
Всем привет! В документации указано, что использование nullable для колонки уменьшает производительность. А кто-нибудь сравнивал, насколько? Есть цель в некоторых строках отмечать часть данных как отсутствующие, теоретически можем это сделать и через nullable, и через отдельные столбцы-флаги, какой вариант по быстродействию лучше будет?
-
может во втором случае перекидывание в prewhere не делается. Можно попробовать вместо where написать prewhere. Или в родном клиенте перед запросом выполнить set send_logs_level='trace' и посмотреть, что оно делает в каждом случае.
-
-
Коллеги, я правильно понимаю, что truncate - фоновый процесс, который выполняется на пуле фоновых процессов, размер которого - background_pool_size?
-
Подскажите, если просто поставить кликхаус он будет есть память и cpu, сколько есть на сервере или нужно, что-то настраивать?
-
Конечно, будет. Но если ничего не делать в нём, то он не будет к примеру кэшить в оперативку
-
функция round позволить округлить значение
-
мне биты в двоичном представлении округлить надо.
сделал так, но может можно проще/быстрее:
reinterpretAsFloat64(
unhex(repeat('0', CUT_BYTES) || substring(hex(VALUE), CUT_BYTES - 16))
) -
сама TRUNCATE query синхронная
но если у вас database engine = Atomic
то данные не удаляются из /var/lib/clickhoiuse/store а удаляются только симлинки из /var/lib/clickhouse/data
и есть два пути
правильный
TRUNCATE db.table SYNC
не правильный
https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/#database_atomic_delay_before_drop_table_secServer Settings | ClickHouse DocumentationServer Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli
-
https://clickhouse.com/docs/en/sql-reference/functions/bit-functions/
bitAnd вам видимо нуженBit | ClickHouse DocumentationBit Functions Bit functions work for any pair of types from UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Fl
-
Спасибо!
-
может быть. Но не особо понятно, как именно применять. Что-то такое выдает явно не то, что я ожидаю: reinterpretAsFloat64(bitAnd(reinterpretAsUInt64(VALUE), reinterpretAsUInt64(unhex('FFFFFF0000000000'))))
-
-
есть разница если ты будешь одновременно записывать на диск один файл или два?
-
вероятно, есть
-
Всем доброго дня, существует ли возможность делать оптимайзы на таблицы merge tree асинхронно (как мутации например) ?
-
Может ещё с порядком байтов что-то, можно потестить конвертацию известных значений в hex и обратно
-
ну вообще конечно там сложно
(reinterpretAsUInt64(VALUE)
почему то меняет бинарное представление... обрезая байты -
а, оно обратный порядок делает, только по два байта подряд. В общем, ладно, мне для тестов моего способа хватило, было интересно, насколько сильнее сжатие будет, если присылать данные в округленном в двоичном формате виде.
PS. Ожидаемо хорошо сжимает
PPS. Изи тогда. Надо просто маску в обратном порядке написать: reinterpretAsFloat64(bitAnd(reinterpretAsUInt64(VALUE), reinterpretAsUInt64(unhex('0000000000FFFFFF')))) -
Это проблема odbc. Кх тут вообще ни при чем. Кх отдает 57млн за 1 сек. если в сеть пролазит.
-
Всем привет!
Помогите пожалуйста разобраться, почему не отрабатывает sumMerge?
CREATE TABLE IF NOT EXISTS test_null
(Week String, Sku String, Store String, Instock_Avl Decimal(10,3), InsertDate DateTime DEFAULT now ())
ENGINE = Null;
CREATE TABLE IF NOT EXISTS test_amt
(Week String, Sku String, Store String,
Instock_Avl AggregateFunction(argMax, Decimal (10,3), DateTime),
FinalInsertDate SimpleAggregateFunction(max, DateTime))
ENGINE = AggregatingMergeTree
ORDER BY (Sku, Store, Week);
CREATE MATERIALIZED VIEW if not exists mv_test TO test_amt AS
SELECT Sku, Store, Week,
argMaxState(Instock_Avl, InsertDate) as Instock_Avl,
max(InsertDate) as FinalInsertDate
FROM test_null
group by Sku, Store, Week;
-- после вставки в test_null
select sumMerge(Instock_Avl) as Instock_Avl from mv_test;
SQL Error [42]: ClickHouse exception, code: 42, host: rc1a-mdf7bm5f6lw91pqm.mdb.yandexcloud.net, port: 8443; Code: 42, e.displayText() = DB::Exception: Aggregate function sum requires single argument (version 21.8.5.7 (official build))
В таком виде работает:
select sum(Instock_Avl) as Instock_Avl from (select finalizeAggregation(Instock_Avl) as Instock_Avl from mv_test); -
-
в каком-то смысле трудоемкий, вычисление avg с преобразованием string во float будет в 10-20 раз медленее, чем просто float
-
Получается лучше модифицировать столбец. Спасибо большое!
-
так argMaxMerge сначала, потом sum, нельзя домержить argMax функцией sum
и да только select sum from select ... -
Спасибо) А чем тогда отличается от finalizeAggregation(Instock_Avl) с последующей агрегацией? Какой подход предпочтительнее
-
тем что finalizeAggregation(Instock_Avl) неправильный результат выдаст. Это не агрегирующая функция.
если у вас есть 2 строки, (y,5) и (x,6), argMaxМerge выдаст 6 и в sum попадет (x) , finalizeAggregation выдаст и 5 и 6, и будет sum(x+y) -
Спасибо большое !
-
Union distinct rtfm)
-
Всем привет! Вникаю в документацию кликхауза, и хотелось бы прояснить некоторые вопросы терминологии, мб кто-то подскажет. Есть следующие термины: partition, data part, granule и data block. Поправьте, если где-то ошибаюсь. Partition - это то что регулируется PARTTION BY, каждая партиция - отдельный раздел (или файл?) на диске, ускоряет запросы (правд ли?). Data part - это то, куда данные попадают при вставке, внутри куска они отсортированы по ORDER BY, затем куски в фоне мерджатся в куски побольше. Granule - это логическое разделение data part’а, по факту засечки индекса по PRIMARY KEY, который в свою очередь чаще всего является ORDER BY’ем, при чтении мы бежим по засечкам, и вычитываем нужные нам гранулы. А вот что такое data block?
-
Вопрос про CollapsingMergeTree (https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/collapsingmergetree/). В доках предалагается использовать конструкции вида
SELECT
UserID,
sum(PageViews * Sign) AS PageViews,
sum(Duration * Sign) AS Duration
FROM UAct
GROUP BY UserID
HAVING sum(Sign) > 0
и не использовать final. А как поступить, если есть строки? Тоже группировать и склеивать их через разделитель в SELECT? Или для сценария, когда есть строки этот engine не очень подходит?CollapsingMergeTree | ClickHouse DocumentationCollapsingMergeTree The engine inherits from MergeTree and adds the logic of rows collapsing to data parts merge algorit
-
> Partition - это то что регулируется PARTTION BY
да
>,каждая партиция - отдельный раздел (или файл?) на диске
каждая партиция отдельный логический раздел на диске
физически это префикс в названии каталогов в /var/lib/clickhouse/data/db/table/{partition_name}_{min_block}_{max_block}_{how_much_merges_applied}`
> ускоряет запросы (правд ли?)
правда, но слишком мелкие partition запросы наоборот замедляют. базовая рекомендация делайте PARTITION BY toYYYYMM(datetime_column)
не ошибетесь
> Granule - это логическое разделение data part’а, по факту засечки индекса по PRIMARY KEY, который в свою очередь чаще всего является ORDER BY’ем, при чтении мы бежим по засечкам, и вычитываем нужные нам гранулы.
почти все верно, только гранула логическая величина когда берется каждая X запись из набора и значения primary key идут в mrk файл, один парт один .mrk файл внутри него
в парте может быть много записей, соответсвенно размер .mrk файла растет тем больше чем больше записей в парте (но незначительно)
есть еще data skip indexes - и там гранула и гранулярность означает сколько гранул из primary key будет покрывать одна структура из data skip index
при чтении мы бежим по засечкам. вычитываем из mrk смещение внутри .bin
и читаем из .bin ДАТА БЛОКИ, расжимаем их
и внутри расжатого блока берем второе смещение из .mrk чтобы понять где начинается исходная запись
и дальше отправляем это в вышестоящий конвейер на фильтрацию \ агрегацию \ сортировку
> Data part - это то, куда данные попадают при вставке, внутри куска они отсортированы по ORDER BY, затем куски в фоне мерджатся в куски побольше
да, все правильно понимаете, после merge двух партов увеличивается цифра в how_much_merges_applied в результирующем парте
см. формат именования еще раз
/var/lib/clickhouse/data/db/table/{partition_name}_{min_block}_{max_block}_{how_much_merges_applied}` -
partition -- это логическое понятие. Это объединение партов. Оно вообще чисто логическое.
мы просто говорим что парты 202101_1_1000_99 и 202101_2034_4560_99 принадлежат одной партиции.
парты -- это как раз папки, они образуются при инсертах И мержах
да Granule -- это на что указывают засечки
datablock -- это понятие native протокола, это не про хранение, это "результат запроса", это кол-во строк в блоке выдачи, т.е.
там идут 30 строк колонка 1, 30 строк колонка 2, 30 строк колонка 3, 65536 строк колонка 1, 65536 строк колонка 2, 65536 строк колонка 3, -
а что вы имеете ввиду под "строками"?
что вам с ними надо сделать? "последнее значение" получить?
можно WINDOW функции попробовать -
извините опять гранулы с гранулярностью попутал
-
agrMax(строка, Sign) ?
-
-
по этим параметрами ничего интересного не оказалось, но потом мы нашли метрику
select * from system.asynchronous_metric_log
where metric = 'OSMemoryCached'
order by event_time desc;
и там как раз видно что она забивается конкретно перед падением.
Как этим можно управлять ?
лимиты по памяти пользователей не отщелкивают
use_uncompressed_cache 0
merge_tree_max_rows_to_use_cache 1048576
merge_tree_max_bytes_to_use_cache 2013265920
тут написано, что кеш для больших запросов не должен использоваться
DROP MARK CACHE
Это же тоже не на постоянку -
> datablock -- это понятие native протокола, это не про хранение, это "результат запроса", это кол-во строк в блоке выдачи
Так всё же, это как вы говорите «результат запроса», или как описал @BloodJazMan выше, это всё-таки что-то про хранение. Очень какой-то расплывчатый термин, в доке он используется как минимум в трёх разделах, и по контексту как будто всё разное означает. Например, я так понимаю, в skip index’ах под «блоком» подразумевается опять же логическая группировка гранул, то есть первичный индекс отсекаеает гранулы, а скип индекс отсекает «блоки» гранул? -
osmemorycached это кеширование дискового чтения, page cache управляет ядро, вы этим не управляете, это просто значит что clickhouse что-то активно вычитывал перед падением...
-
use_uncompressed_cache действительно не нужен для больших SELECT
-
да, последнее значение
-
да, мы там грузим данные и периодически падает. Шутим, что быстро поднятое не считается упавшим, но это не серьезно. Пытаюсь докопаться как этого избежать, но лучше, как этим управлять
-
что значит "грузим данные"?
insert делаете и select большие одновременно?
"падает clickhouse"
это что значит?
OOM? как вы это определяете? -
clickhouse-client в Native формате с одного на другой переносим. Падает виртуалка, если быть точнее, но при использовании клика. В кусочке лога было видно, и специально нагружали и в мониторинге потребление виртуалкой памяти возросло до критических размеров. У виртуалки 138G ОП, для клика в параметрах 128G серверной памяти. Лимиты на запросы действую. На эту нашу загрузку, видимо, нет.
-
виртуалка какая? VMWare?
-
Это сильно влияет?
-
не знаю, но могу уточнить
-
Все привет. Подскажите, пожалуйста, адекватный способ на весу преобразовать timestamp in milliseconds (по сути Int32 - 1632221751453) в DateTime64. FROM_UNIXTIME и CAST не умеют в миллисекунды, а toDateTime64 принимает или строку или DateTime, который уже потерял точность, или now64().
-
уточняйте
дело в том что clickhouse-client -h host1 -q "SELECT * FROM table FORMAT Native" | clickhouse-client -h host2 -q "INSERT INTO table FORMAT Native"
не должен жрать 128 метров оперативы
на host2
и сам clickhiouse-client должен жрать только буфера на чтение и вставку пропорционально кол-ву колонок -
https://clickhouse.com/docs/ru/sql-reference/functions/type-conversion-functions/#fromunixtimestamp64milli
upd: + toInt64 чтобы преобразовать Int32 в Int64 -
да, мне тоже странно
у нас Proxmox VE -
-
clickhouse-server точно разные?
order by/group by нету в SELECT ?
просто переносите таблицу один в один? -
ну так у вас проксмокс падает, а не кликхаус. вашим админам бы поискать инфу на эту тему, если с этим первый раз сталкиваются.
может конечно они памяти выдали виртуалке больше чем есть свободной на физическом сервере, а может ещё что.
пусть смотрят логи проксмокса вместо того, чтобы вас футболить вторую неделю. -
А он по дефолту суммирует? И как указать поле, по которому надо суммировать?
Пока не могу в интернете найти ответ -
там 21.7.4.18 --> 21.8.4.51,
order by/group by нету, есть выборка по дате и id
select * -
а могут вам графики расшарить по потреблению процессами памяти какие нибудь сторонние?
OSmemorycached это не обязательно clickhouse-server там что-то резко начитал в память
это цифирка из OS -
LXC: Segmentation fault, sporadically · Issue #21594 · ClickHouse/ClickHouse
Sometimes, once in 2-3 hours, Clickhouse restarts with segmentation fault. Database has almost no load, approx. 1000 inserts per minute. Does it reproduce on recent release? Yes How to reproduce I ...
-
@nikitenkoolga скажите вашим админам, чтобы юзали свежую версию проксмокса, докера и ядра или хотя бы запускали в режиме KVM вместо LXC.
-
Кто нибудь стримит данные из bq?
-
Здесь было описание тривиальной ошибки, с некорректными полями*
-
Может у вас разные схемы на тесте и на проде?
-
Снимаю вопрос, спасибо. Где-то авторазворот ансиблом не тот тип поля выставил.
-
kvm
-
тогда нужен как минимум текст ошибки в проксмоксе, чтобы дело сдвинулось с мёртвой точки
-
ладно, достану
-
здравствуйте, для одной из таблиц стала появляться ошибка DB::Exception: Incomplete granules are not allowed while blocks are granules size. Mark number 278 (rows 8192), rows written in last mark 0, rows to write in last mark from block 1 (from row 8192), total marks currently 279
это лечится только установкой can_use_adaptive_granularity=0?
уже пробовал перелить таблицу и через INSERT SELECT и через дамп в файл и рестор - не помогает -
интересно, а какая гранулярность у вас задана?
-
SETTINGS index_granularity = 8192
-
Clir in ClickHouse не тормозит
очередь с такими ошибками last_exception: Code: 49, e.displayText() = DB::Exception: Incomplete granules are not allowed while blocks are granules size. Mark number 3 (rows 8192), rows written in last mark 0, rows to write in last mark from block 1 (from row 8192), total marks currently 4 (version 21.2.6.1 (official build)) postpone_reason: Not executing log entry queue-0000071148 of type MERGE_PARTS for part 632801e1b685803d8904b35e30441476_1143_1525_261 because source parts size (4.29 MiB) is greater than the current maximum (1.00 MiB).
-
да, но у нас то довольно свежий сервер - 21.3.5.42
-
https://www.cnews.ru/news/top/2021-09-21_yandeks_zaregistriroval оффтоп но все же, про бесплатный клик можно позабыть? Т.е. сперва такая бесплатная модель ю, чтобы набрать клиентов, а потом выкатить коммерческую версию и сказать: "Ребят, мы выкатили коммерческую версию, заплатите 10000 бакинских! " и будут вам обновления и техподдержка?«Яндекс» решил сделать свою открытую СУБД коммерческой, потратив на проект $50 млн
«Яндекс» запустил проект, финансирование которого составляет почти $50 млн. В основу коммерческих разработок новой...
-
Уже писали что будут поддерживать :) Вы чутка опоздали, холивар был позавчера
-
Какой то странный ресурс вы читаете🧐
-
Эхх, опоздал. А где пруфы, Билли?
-
Dmitry [Altinity] Titov in Data Engineers
Мы будем стараться :)
-
Пусть тогда Алексей Миловидов @milovidov_an внесёт ясность какой-нибудь статьей, на Хабре или где например.
-
Только мы не Яндекс и не ClickHouse Inc, а Altinity :) .ClickHouse Software And Services — Altinity
Deploy and operate ClickHouse, a lightning fast, open source SQL data warehouse for real-time analytics, time series, and log analysis.
-
Это да. Но учитывая ваш опыт мне лично все равно что коммитить будет не Алексей.
-
Уверен вы сделаете четко 😎
-
Я просто решил уточнить, вдруг неправильно поняли.
-
Ясность конечно не помешает, но мы не вправе её требовать. Найболее вероятной выглядит модель open source + плюшки и облако за деньги. Собственно CEO Aaron Katz из Elastic, зарабатывающий такой моделью, и пришёл.
-
Есть json типа:
user_id: 1
country: "RU"
Как лучше его хранить в CH?
1. Распарсить его на две колонки user_id и country, и повещать индексы на них
2. Хранить как строку -
если ключей действительно два как в примере, то распарсить, положить в колонки и не искать себе приключений.
Но если ключей сотня, со сложной иерархией/структурой, и вы сами не знаете зачем они вам нужны, то можно положить в строку и парсить по требованию. Или материализовать в столбец, когда захочется быстрого доступа и агрегаций по какому-то из полей.
Можно посмотреть например тут - https://altinity.com/webinarspage/2019/12/17/a-practical-introduction-to-handling-log-data-in-clickhouse
(и надо добавить, что индексов тут скорее нет, чем есть) -
Индексов в json? Просто потом нужно будет группировать по user_id
-
индексов в КХ. Тут нет индексов, тут есть сортировка данных при хранении. Группировка сама по себе не требует индекса если вы хотите прочитать всю таблицу.
Но вы не ответили на вопрос - насколько велик и непредсказуем ваш json. -
Тот что скинул это максимум. Есть ещё большой json у которого меняются поля - он будет как строка записан
-
Ну все равно если данные будет отсортированны по user_id их легче брать будет. Так же?
-
-
Спасибо
-
тогда делайте парсинг перед инсертом и кладите в две колонки. И разбирайтесь с order by. Дело же не в том чтобы "легче брать", а в том чтобы "меньше читать".
-
https://kb.altinity.com/altinity-kb-schema-design/altinity-kb-jsonasstring-and-mat.-view-as-json-parser/
Можно прямо в кх парсить, например с помощью DEFAULT -
а как ошибки обрабатывать при таком парсинге? Что будет, если в 1 строчке из 10к будет json неправильного формата?
-
никак, пустота будет
-
Лучше пред обработку данных сделаю
-
Здравствуйте, подскажите пожалуйста, поддерживает ли clickhouse-copier копирование materialized view ?
-
Статья на C-news странная, я подробно не читал, но заголовок некорректный.
Вот тут оригинальная статья: https://clickhouse.com/blog/en/2021/clickhouse-inc/ Там написано, что собираемся делать. Для ClickHouse open-source комьюнити - самый важный драйвер развития, отказываться от этого не собираемся.Introducing ClickHouse, Inc.Today I’m happy to announce ClickHouse Inc., the new home of ClickHouse. The development team has moved from Yandex and
-
Спасибо! Будем надеется что будущее у open-source CllickHouse будет таким же долгим, как у коммерческой.
-
-
посмотрите из ОС сколько памяти использует КХ (RES/RSS)
-
да да да
-
версия КХ ?
-
21.3.5.42
-
так обновляйтесь до 21.3.17.2, между ними разница полгода
-
спасибо
- 23 September 2021 (149 messages)
-
Привет всем, подскажите пожалуйста есть ли у AggregatingMergeTree столбец ver как у ReplacingMergeTree?
Необходим функционал ReplacingMergeTree (ver) и AggregatingMergeTree ( AggregateFunction.). -
-
без проблем
-
👍👍 спасибо!
-
нет, делайте каскад таблиц
первая ReplacingMergeTree
вторая AggregatingMergeTree
и перекладывайте в ручную по какому нибудь snowflake id UInt64 полю -
Ок. Спасибо. Попробую
-
-
она итак консистентность там будет
аггрегат в AggregatingMergeTree не финализирован, там только State необходимый для финальной аггрегации
доку еще раз перечитайте, пожалуйста
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/aggregatingmergetree/#example-of-an-aggregated-materialized-viewAggregatingMergeTree | ClickHouse DocumentationAggregatingMergeTree The engine inherits from MergeTree, altering the logic for data parts merging. ClickHouse replaces
-
как оно будет консистентным, если MV-триггер на инсерт. Пример, создана MV, далее я беру и заполняю таблицу, которая находится в TO без фильтров на то, что уже попало в TO. Разве суммы/количества не задвоятся?
-
Коллеги , добрый день.
Подскажите есть ли вариант приаттачить партици broken_* из detach ? -
если они broken - то скорее нет (либо к таблице не подходят либо CRC битый). хотя можно посмотреть почему они broken...
-
а зачем так делать?
заполняйте только таблицу которая в FROM
для MV написана...
а destination таблицу которая в TO
пусть заполняет триггер MV -
Пользователь запустил запрос который должен был прочитать и вернуть хренолион строк. Запрос упал по памяти а все партиции которые он успел прочитать упали в брокен
-
мне надо исторические данные же сохранить, MV начнет писать только новые, а мне старые тоже нужно пересобрать в агрегат.
-
исторические данные у вас сейчас в каком движке? MergeTree? или уже в AggregatingMergeTree?
-
они в source таблице, MergeTree.
-
в общем в любом случае, если нужна историчность, на ходу это безопасно не сделать, только останавливать заливку в source
-
у вас должно быть поле по которому четко можно определить "вот новые данные"
назовем его import_counter
в лучшем случае монотонно восрастающий snowflake id UInt64
в худшем случае datetime64(6) как DEFAULT now() который означает время импорта в source таблицу
дальше делаете так
создаете AggregatingMergeTree - aggregateed_table
SELECT max(import_counter) FROM source_table
сохраняем
импортируем source таблицу по частям если большая
INSERT INTO aggregated_table SELECT .. FROM source_table WHERE import_counter BETWEEN ... AND ... GROUP BY ...
создаем новую таблицу с той же структурой что текущая
CREATE new_source_table LIKE source_table
создаем MaterializedView
CREATE MATERIALZIED VIEW mv TO aggregated_table
SELECT ... State(x) FROM new_source_table
GROUP BY ...
переключаем вставку на new_source_table
довставляем дельту
INSERT INTO aggregated_table SELECT .. FROM source_table WHERE import_counter > max_counter_from_previous_step GROUP BY ... -
Да, спасибо, по такому алгоритму уже и делали, просто и вопрос заключался в том, чтобы не переключать вставку совсем.
Такое в текущей реализации, к сожалению, не получится. Будем останавливать. -
Добрый день.
Подскажите, что может вызывать такое резкое уменьшение места на дисках? Данные пишутся равномерно в реплицируемые таблицы, шардирование по дате. Сегодня ночью за пол часа съело больше 15% диска. -
смотрите
system.parts_log -
проверьте что мержинг идет...
"шардирование по дате" значит что новые данные вставляются в какой то один шард?
или под датой имеется ввиду "дата+время" и просто одна секунда вставляется в один шард?
вставляете в distributed? -
К сожалению, part_log не включен был, поэтому логов нет.
Импортеры подключаются к нодам через BalancedClickhouseDataSource, пишем все в таблицу с движком Null, которая есть на каждом сервере. Вставка через мат вьюхи в ReplicatedMergeTree, на шард по 3 реплики. Дистрибуция самой крупной таблицы по cityHash64(request_id), т.е. считай рандом, таблицы с почасовой разбивкой - cityHash64(toDate(received_at_hour)), подневной - cityHash64(received_at_date).
Все это работает уже не один год, только в последнее время начали замечать такие всплески. То вырастает на 15-20 процентов, через несколько дней так же может упасть. -
ну у вас там не успевает видимо смержится
размер партов какой по кол-ву строк?
system.parts
смотрите
смотрите сколько system.parts active=0 -
на одной машине таких 1421 и растет, 13 партишенов 2021-09-23, строк от 210769 до 855877, остальные партишены 202109 до 333963 строк
-
в смысле у вас на машине active=0 растет 1421 партиция в одной таблице или вообще?
-
в смысле 1421 неактивная партиция
на других машинах примерно столько же
UPD: остановил импортеры, количество неактивных партиций начало падать до 923 -
Всем привет!
может кто-то подскажет, пожалуйста, как в clickhouse-copier, в несколько воркеров копировать?
увеличение в воркеров в таске эффекта не дало, или надо параллельно запускать несколько копиров? -
ну merge проходит парты удаляются, они не сразу удаляются
-
пока не удаляются, количество неактивных вернулось до прежнего уровня, место на диске так и не освободилось. Сейчас практически не пишем в кластер, почему может не проходить удаление партиций?
-
system.merges смотрите и system.mutations
мутации у вас используются? -
в merges почему-то мерджится партиция 202107 у которой total_size_bytes_compressed = 88 GB.
в мутациях ничего, кроме пары зависших 10 дней назад MATERIALIZE TTL
UPDATE: в таблице system.merges пусто теперь, но в system.parts where active = 0 у этой таблицы размер как раз эти 88 Гигабайт -
-
Добрый день. У меня стандартная вроде задача , подскажите, пожалуйста, оптимальное решение.. есть словарь, который обновляется из вью постгреса. Но в постгресе данные всегда на текущий момент, если значение больше не актуально, его не будет. А мне нужна историчность- потому что логи, для которых этот словарь, анализируются за некоторый период в прошлом. Как сделать словарь, в котором значения с теми же ключами обновлялись, а если ключа в источнике больше нет, то сохранялись бы старые значения?
-
если использовать AggregateFunctions Max и ArgMax то получается тоже самое что и Replacing
-
можно настроить КХ и создать MV таким образом чтобы при повторных вставках (ретраях инсертов) все довставлялось в MV (по умолчанию это выключено и я уже устал объяснять почему)
-
переименовать (убрать broken) и сделать attach part
хотелось бы увидеть логи КХ -
конечно сделать, без остановки можно, миллион способов
-
да. так и починил. задетачил партицию целиком. переименовал битый фрагмент и приаттачил партицию обратно
-
зачем детачил? просто alter table attach partition или еще проще alter table attach part 'part_id'
-
проверьте что мерж не идет сейчас очень длинный select elapsed from system.merges
-
месяц назад попытка приаттачить битый фрагмент вызвала краш сервиса. Поэтому опасался
-
Pandahouse
-
чудеса какие-то вы рассказываете, такое надо сообщать разработчикам
-
версия старая 19.5 уверен что получил бы рекомендацию обновиться
-
а это да, никто на такое старье время не будет тратить, все скорее всего пофикшено уже
-
кол-во воркеров в таске дает эффект если партиций много, они партиции параллельно копируют
несколько копиров запускать нельзя -
спасибо!
-
если сделать partial update словарь, то не будет удалять строки, до полной перезагрузки словаря (system reload dictionary)
https://kb.altinity.com/altinity-kb-dictionaries/partial-updates/
а по хорошему надо делать ETL и копировать данные в таблицу в КХ и словарь направлять на эту таблицу -
ну то есть у вас постоянно подмерживается парт за 202107 которому 88гб
там у вас прилетают какие то данные за июль потихоньку пара строк? -
С регулярным полным обнулением таблицы или при настройке словаря появилась возможность group by указывать?
-
зачем group by ?
-
почему бы июлю не смержится сейчас? Просто в пуле появились ресурсы например
-
Если словарь натравливать на таблицу в кх, то она же булет иметь дубликаты при докидывании обновлений.
-
👋 Хай, подскажите как можно узнать причину, по которой alter delete не удаляет данные уже продолжительное время?
alter table agg.events_hour_local delete WHERE (day = '2021-09-22' and cid = 2525 and os = '')
В system.mutations мутация есть, но в system.merges where is_mutation = 1 пусто. Логи также пустуют. Ни ошибок, ни подсказок
UPD: версия 21.6.6.51 -
и откуда дубликаты?
-
В system.mutations много полей и в них много интересного написано, обычно ответ на ваш вопрос тоже
-
Кажись понял. Отбираются записи старше сохраненной даты, обновляются в словаре по ключу. В таблице по ключу дубликаты, но словарь последние значения хранит.
-
всем привет
select
TerminalId
,ifNull((TransactionAmountSum + TransactionAmountSumDomMc),toDecimal32(0,8)) as col1
,TransactionQtyDomMc0_20 + TransactionQtyIntMc as col2
,toTypeName(col1) as col1_type
,toTypeName(col2) as col2_type
,case when col2 = 0 then 0 else col1/col2 end as res
from _ecom_transaction_predictors
where TerminalId = 'E0104631'
Ошибка
DB::Exception: Division by zero:
Данные:
TerminalId col1 col2 col1_type col2_type
E0104631 0.00000000 0 Decimal(38, 8) UInt64
Почему case не срабатывает? -
1 в таблице (она ведь будет маленькая) можно сделать replacingMergeT и всегда делать optimize после заливки
2 можно сделать вообще таблицу RockDB и там не будет дубликатов
3 и да в словарях можно писать теперь произвольный SQL запрос -
SELECT *
FROM system.mutations
WHERE is_done = 0
Query id: 20500c01-c47c-478f-b758-d9bb9306c993
Row 1:
──────
database: agg
table: events_hour_local
mutation_id: 0000000012
command: DELETE WHERE (day = '2021-09-22') AND (cid = 2525) AND (os_type = '')
create_time: 2021-09-23 12:32:16
block_numbers.partition_id: ['20200713','20200720', ... сократил для удобства чтения ... ,'20210920']
block_numbers.number: [1732,2053, ... сократил для удобства чтения ... ,13644]
parts_to_do_names: ['20210920_0_13367_6']
parts_to_do: 1
is_done: 0
latest_failed_part:
latest_fail_time: 1970-01-01 00:00:00
latest_fail_reason:
Резервирует место чтоли? Фейла нет, причины также. Будто залип на чем то. Кластер из двух реплик, на другой реплике также пусто. Имхо в зк тоже не может быть проблемы. Я вижу пока путь рестарта обоих нод авось поможет (иногда прокатывало) -
Всем привет. Надо заимпортить CSV в котором встречаются строки типа "TEXT_"TEXT"", хотелось бы чтобы в базу попало TEXT_"TEXT". Если использовать --format_csv_allow_double_quotes=0 то в базу попадает "TEXT_"TEXT""
Ответ где то на поверхности, но не могу сообразить. -
размер парта 88гб
inactive part еще живет какое то время ...
у людей размер на диске скачет людям страшно
https://t.me/clickhouse_ru/235710Vladimir S in ClickHouse не тормозитДобрый день. Подскажите, что может вызывать такое резкое уменьшение места на дисках? Данные пишутся равномерно в реплицируемые таблицы, шардирование по дате. Сегодня ночью за пол часа съело больше 15% диска.
-
так это мерж идет очень долго, я тут не вижу ничего странного на графике, плюс там возможно TTL который не стартует потому что места нет
-
parts_to_do_names: ['20210920_0_13367_6']
надо посмотреть что с этим партом, есть ли такой парт, возможно он уже мутировал, тогда detach / attach табилицы пнет мутацию
возможно он большой и места нет
надо поискать в логе сообщения про этот парт
у меня было в старых версиях что права на файлах парта были r-r-r и мутация не работала пока rwrwrw не сделаешь -
Копировать данные в таблицу я думала, а что выбрать тогда в качестве движка таблицы и способа для регулярного копирования? Почему-то кажется, что эрфлоу для считывания новых данных из базы и и обычные движки с версией это чересчур.
-
Denny Crane [Starship Captain at Altinity (NB,Canada)] in ClickHouse не тормозит
1 в таблице (она ведь будет маленькая) можно сделать replacingMergeT и всегда делать optimize после заливки 2 можно сделать вообще таблицу RockDB и там не будет дубликатов 3 и да в словарях можно писать теперь произвольный SQL запрос
-
etl фреймворк
-
спасибо
-
приходить свежих данных за июль не должно быть, это точно.
этот партишн уже смерджился, в system.merges пусто, иногда простакивает за текущий месяц мердж. в мутациях тоже пусто, в system.parts active = 0 размер суммарный не привышает гига, но место по-прежнему не вернулось после скачка. Это было бы не так страшно, если бы мы не приближались уже к 95%, когда поды просто начнут умирать от нехватки места. -
вы уже включили system.parts_log?
анализ system.parts по тому какие данные больше всего на диске жрут нашли? -
Докинул rwrwrw, которых не было. Парта к слову тоже нет, но аттач&детач ни таблицы, ни партиции не помогли. Попробую рестартануть
-
еще можно глянуть на колонки name и modification_time в system.parts. Если в конце name "_0" - это еще ни с чем не слитые данные. modification_time понятно, можно посмотреть, с какими партами что-то делалось самое последнее
-
Спасибо, посмотрю rockdb
-
>Парта к слову тоже нет
а подробнее? Есть другой 20210920_0_13367_.... ? -
вы TTL используете?
-
посмотрите detached папки
и сравните занятый размер du -sh / system.parts active / system.parts active +system.parts inactive -
Ноу, только 20210920_0_3038_5 ближайший похожий. Для чистоты удалил мутацию, рестартанул кх, проставил в папке с данными chmod 777 */* и прогнал снова - застрял. Зато на логах реплики заметил много одинаковых строк:
: Checking part 20210920_13777_13808_2_13807
: DB::Exception: No active replica has part 20210920_13777_13808_2_13807 or covering part
: Checking if anyone has a part 20210920_13777_13808_2_13807 or covering part.
: Found parts with the same min block and with the same max block as the missing part 20210920_13777_13808_2_13807. Hoping that it will eventually appear as a result of a merge. -
застрял снова на 20210920_0_13367_6 ?
-
Да, ровно тот же парт
-
и в system.parts его нет
надо смотреть на реплике
надо смотреть в ZK -
что то конкретное искать, или просто наличие аномалий, логов и прочего?
-
да парт этот в списке партов в ZK.
видимо проще всего detach/attach всей партиции, но реплика перекачает -
пока нет возможности рестартануть кластер.
Denny Crane [Starship Captain at Altinity (NB,Canada)], [23.09.21 16:32]
[In reply to Vladimir S]
посмотрите detached папки
и сравните занятый размер du -sh / system.parts active / system.parts active +system.parts inactive
в system.parts таблице общий размер партиций 2.17 TiB, а на самом диске
Filesystem Size Used Avail Use% Mounted on
overlay 3.8T 2.9T 337G 90% /
Denny Crane [Starship Captain at Altinity (NB,Canada)], [23.09.21 16:30]
[In reply to Vladimir S]
вы TTL используете?
да, на отдельной колонке в самой большой таблице, так же недавно добавились таблицы с TTL в несколько дней, но там пока мало данных -
На таблицу навешено 2 МВ. Хотим ускорить инсерты в МВ. МВ пишет в отдельную AggMT таблицу, там нет даты, партиционирование по intDiv(id, 50000000), всего 6 партиций. Бывают вставки в несколько партиций сразу, это скорее всего медленно. Всего в AggMT 60млн строк, таблица размером 72ГБ. Стоит попробовать переделать на 1 партицию, может это помочь улучшить перформанс на вставке МВ?
-
-
Ну т.е. на 200 гиг не совпадает?
-
А если включить параллельный процессинг МВ меняется что-нибудь?
-
ЭмХм. Зачем?
-
на таблицу и чтобы писал в 1 партицию?
-
Нет. Параметр пользовательский parallel view processing
-
Тип данных нужно поменять с UInt64 на Decimal в основной таблице. Но на эту таблицу ещё смотрит материальная вьюшка, которая перекладывает промежуточный результат агрегации в таблицу, в которой тип столбцов AggregateFunction. Поэтому нужно ещё и там поменять тип
-
спс, выключен
попробую включить, он сразу же подтянется из профиля пользователя? -
Да
-
Тогда видимо все сложно. Ещё одно поле добавить в aggr,MT , сделать там default из старого поля через конвертации, и потом помержить и переименовать поля
-
спасибо
-
Привет. ENGINE RabbitMQ считается стабильным в 21.9.2.17?
Для вычитки раббита использую таблицу ENGINE = RabbitMQ
SETTINGS rabbitmq_host_port = '192.168.0.10:5672', rabbitmq_exchange_type = 'direct', rabbitmq_exchange_name = 'import_events', rabbitmq_routing_key_list = 'import_events', rabbitmq_format = 'JSONAsString', rabbitmq_flush_interval_ms = 5000, rabbitmq_num_consumers = 1;
далее полученные строчки парсю как json в MATERIALIZED VIEW. Вроде тут всё логично.
Консьмер периодически отпадывает и не перезапускается
<Error> StorageRabbitMQ (rabbitmq_queue): Library error report: connection prematurely closed by client
<Fatal> BaseDaemon: (version 21.9.2.17 (official build), build id: E4F05ABB2100332308613C22030A03F5A4621821) (from thread 14016) (no query) Received signal Segmentation fault (11)
<Fatal> BaseDaemon: Address: NULL pointer. Access: read. Address not mapped to object.
А в логах по нескольку раз в секунду сообщения
<Error> void DB::StorageRabbitMQ::streamingToViewsFunc(): Code: 49. DB::Exception: Pos in empty own buffer. (LOGICAL_ERROR), Stack trace (when copying this message, always include the lines below)
Стабильно писать данные у меня пока не получилось. -
Привет, как убедиться, что все ddl , которые были на первом ноде с ON CLUSTER выполнены, попали на все остальные ноды и сохранились на диске? Какой то flush или что то подобное есть? Чтобы не ждать пока оно само, а зафорсить?
-
Коллеги, приветствую! Стоит задача записывать и работать с очень большим (сотни гигабайт raw) тесно переплетенных данных - multiarrays of multiarrays, структуры массивов заранее неизвестны и ничем не ограничены. В качестве примера можно использовать такую абстракцию - - 1. таблица: колонки - условия (например языки), строки переменные при этих условиях (термин, и его переводы), в следующей таблице уже эти термины могут стать заглавиями колонок или ключевиками для строк. И так до бесконечности. Хочется во первых сами переменные (также как и название строк и столбцов хранить где-то во внешнем словаре на каком-нибудь rocksdb, а в мультидименшен массивах оперировать idшниками как в ClickHouse. Сейчас присматриваюсь к https://tiledb.com , но пока его победить не удается, может не докопал, конечно еще, например, для каждого массива приходится указывать схему, типы данных, атрибуты, размерность заранее, а у нас массивов много и они будут появляться непредсказуемо, ну и функциональности внешних словарей не хватает, не только в данных, но и в схемах. Как я вижу идеальный вариант - tiledb еще одно хранилище для ClickHouse и еще и с внешними словарями и еще не только для данных, но и для схем. Если я правильно понимаю, потенциально это дало бы огромный скачок в развитии (очень сильный рост производительности, снижение накладных расходов, а самое главное упростилась бы работа с данными сильно) Возможно ли организовать подобное на Clickhouse и если да то как? Если нет, может знаете, как проблему можно эффективно решить?TileDB - Data management made universal
Manage any data as multi-dimensional arrays and access with any tool at global scale, all serverless.
-
а это не ложится на какойнить Dgraph ?
-
Можно до определенного предела, но верхнего предела не предполагается. Плюс - в TileDB это по идее гораздо эффективнее и по месту и по производительности.
-
В Dgraph именно вносить не пробовали, но Stardog, например, загнулся.
-
И у dgraph есть какие-то ограничения, не помню точно какие, на комьюнити версию... Неприемлемо тоже...
-
Здравствуйте, подскажите, пожалуйста, принцип работы команды OPTIMIZE - насколько я поняла из доки она выполняет принудительное слияние данных для более эффективного их хранения. Означает ли это, что данные будут занимать меньше места после ее выполнения? не блокируются ли таблицы во время ее выполнения?
-
Таблицы не блокируются, данные какое-то время могут занимать даже больше места, чем занимали 🙂насколько помню те парты, что были помержены, удаляются не сразу после мержа. После мержа и удаления померженных партов, данные будут занимать, по крайней мере, не больше места чем занимали. Степень уменьшения объёма данных зависит от самих данных, ключа сортировки и кодеков применяемых для сжатия.
-
спасибо! а настройкой кодеков можно прямо существенно изменить объемы данных? у меня просто проблема с местом на сервере, и я пытаюсь понять можно ли как-то оптимизировать средствами кликхауса или только увеличением сервера
-
Да, Dgraph пощупаю сейчас еще раз - с тех пор, как в последний раз интересовался (год назад, наверное) многое изменилось-появилось... Возможно...
-
просто OPTIMIZE
пытается стриггерить background merge
OPTIMIZE .. FINAL
полностью перебирает таблицу
не используйте его если не понимаете что делаете, убьете дисковую производительность -
если dgraph не подйдет еще есть вот такая графовая БД
https://github.com/vesoft-inc/nebulaGitHub - vesoft-inc/nebula: A distributed, fast open-source graph database featuring horizontal scalability and high availabilityA distributed, fast open-source graph database featuring horizontal scalability and high availability - GitHub - vesoft-inc/nebula: A distributed, fast open-source graph database featuring horizo...
-
Не нашел в зк этого парта. Решил детач/атач сделать партиции, в итоге на одной ноде данные удвоились, на другой стало меньше и мутация на половину завершилась) Проблема была в том что детач оказался дольше 300 секунд и он тоже залип, поэтому могли быть осложнения. В общем решил снова рестартануть кликхаусы, полностью переналить агрегаты из сырой таблицы и на этом закончить. Теперь правда в логах маячит потерянный парт, которого, конечно же нет)
-
Вот тут можно почитать про кодеки и подобрать подходящий в зависимости от данных и сортировки https://clickhouse.com/docs/en/sql-reference/statements/create/table/#codecsTABLE | ClickHouse Documentation
CREATE TABLE Creates a new table. This query can have various syntax forms depending on a use case. By default, tables a
-
-
Благодарю, буду смотреть...
-
спасибо!
-
А строится ли skip index при optimize, если запустить его после добавления индекса?
-
Падают запросы по оценке времени выполнения. Пример:
Estimated query execution time (2267171.9933172856 seconds) is too long.
Явно это некорректная оценка. Но отказываться от этой проверки тоже не можем, чтобы не допустить намертво завысшего запроса, который будет действительно выполняться несколько часов.
Можно ли отключить эту проверку и включить проверку по реальному времени выполнения запроса? Чтобы запрос сбрасывался по достижению заранее заданного лимита времени? Как называется эта настройка?
Версия 21.7.5.29. -
-
detach/attach надо делать на одной реплике, затем удалить все в detached на всех других репликах
system restart replica таблица -
да, но есть materialize index -- намного более легкая команда
-
да , отключается timeout_before_checking_execution_speed=0
-
🙏 спасибо, 100% в этом было дело. Я правильно понимаю, что когда посылаю ddl на альтер, то выбор партов которые нужно мутировать идут с зукипера? Т.е. сейчас в логах No active replica has part 20210920_13777_13808_2_13807, то нужно удалить этот парт из зк?
-
О, спасибо за наводку, а на проде materialize запустить можно, сильно бьёт по перформансу?
-
как бы да, но в современных версиях это решено, там создается пустой парт для потеряных партов
-
можно, не сильно
-
[zk (CONNECTED) 28] ls /clickhouse/cluster_1/tables/2/agg/events_hour_local/block_numbers/20210920_13777_13808_2_13807
я даже нашёл его по эту пути. Безопасно будет его deleteall сделать? -
Господа подскажите как правильно создать индекс. Есть такая таблица:
CREATE TABLE IF NOT EXISTS Params
(
param0 Int32,
param1 Int32,
param2 Int32,
createdDate DateTime
) ENGINE = MergeTree() PARTITION BY toYear(createdDate)
ORDER BY (createdDate)
Планируется в поиске использовать обязательно одно поле param0, остальные опциональные.
Т.е. в зпросе в where может быть любая комбинация параметров paramX и createdDate. -
Что такое "поиск"? Сколько записей вы хотите выбрать из таблицы? Сколько всего в таблице?
Я бы начал с хороших дисков и варианта ниже. И посмотрел бы насколько оно удовлетворяет по скорости:
CREATE TABLE IF NOT EXISTS Params
(
param0 Int32,
param1 Int32,
param2 Int32,
createdDate DateTime
) ENGINE = MergeTree() PARTITION BY toYYYYMM(createdDate)
ORDER BY (param0,param1,param2,createdDate)
где порядок paramX зависит от кардинальности (меньший вперед)
индексов в общеупотребительном понимании (типа pg) тут нет. -
Ответил сам себе - безопасно. Сделал потом нормальный атач/детач, всё решилось, спасибо за помощь
-
1) Поиск это select ... where ....
2) Записи в таблице это действия юзера в приложении. Планируется что в сутки будет по 3000-5000 новых записей.
3) Хочу строить график, показывающий сколько и каких действий было в приложении за определенный промежуток времени.
Спасибо за пример, буду пробовать. -
5000 в сутки - это очень мало. нормальное число для КХ от миллиона. У людей тут бывает по сотне и более миллионов. Так что правильного порядка order by вам скорее всего хватит. И стандартного партиционирования по месяцам.
-
👍 спасибо
-
Понял, спасибо!
-
ну по идее файлы для skip index создаются в момент создания нового парта, так что должен перестраиваться
но есть же отдельно
ALTER TABLE ... MATERIALIZE INDEX IN PARTITION
https://clickhouse.com/docs/en/sql-reference/statements/alter/index/INDEX | ClickHouse DocumentationManipulating Data Skipping Indices The following operations are available: ALTER TABLE [db].name ADD INDEX name expressi
-
А вот если, в теории, кусок уже один, то optimize не поможет, нужен получается ещё и final?
-
типа того.
optimize вызывает незапланированный мерж, т.е. если у вас 10 кусков, то optimize помержит что-то, например 2 куска из 10, и в итоге будет 9 кусков, 1 новый, 8 старых.
Final смержит все 10 старых кусков в один новый, точнее попытается , сделает то что сможет в зависимости от места в пуле. -
Ну и выходит что просто optimize не построит индекс для тех кусков, которые он решил не трогать
-
выходит что optimize final тоже
-
Понятно, спасибо! А-то как-то дока сбивает с толку своим «If you specify FINAL, optimization is performed even when all the data is already in one part», но выходит что ничего не гарантируется
-
вам же сказали что проще через ALTER TABLE...
там даже MATERIALIZE INDEX IN PART по идее должно рабоать а не только PARTITION -
Я просто для понимания
-
ну там в доке 10005000 вещей не написаны или устарели.
если бы у меня было 5 минут я бы поправил, но их у меня нет.
появился например параметр который заставляет FINAL не мержить если парт один и его левел >0
или например FINAL мержит не обращая внимания на макс. рамер парта, это тоже не написано, а обычный мерж обращает -
По поводу 10005000 немного чувствуется, так бы я в этот чатик не забрёл) Попробую в ближайшее время помочь PR’ами в доку
-
Подскажите, пожалуйста, как-то можно через http client вместе с ответом получить время выполнения запроса? Может как-то можно заставить отдавать какой-нибудь кастомный хедер?
-
system.parts показывает неправильный размер данных?
подскажите, пожалуйста, что я делаю не так
выполняю запрос чтобы посмотреть занимаемое таблицей место
SELECT
table,
formatReadableSize(sum(bytes)) AS size,
formatReadableSize(sum(bytes_on_disk)) AS size_disk,
formatReadableSize(sum(data_compressed_bytes)) AS data_compressed_bytes,
formatReadableSize(sum(data_uncompressed_bytes)) AS data_uncompressed_bytes,
min(min_date) AS min_date,
max(max_date) AS max_date,
count(*)
FROM system.parts
WHERE active AND (table = 'ts_data_double_5')
GROUP BY table
size_disk = 2.52 TiB
смотрю df -h или du -h /mnt (все диски подмонтированы в /mnt)
говорит
1.4TB
я неправильно написал запрос или? -
сервер один
-
ebs диски, фс ext4
-
а база данных одна?) Может в другой есть таблица с тем же именем
-
вопрос снят. прошу прощения за беспокойство. половину данных запихнуло в s3 диск, хотя в конфиге прописано
<disks>
<disk1>
<path>/mnt/disk1/</path>
</disk1>
<disk2>
<path>/mnt/disk2/</path>
</disk2>
<disk3>
<path>/mnt/disk3/</path>
</disk3>
<disk4>
<path>/mnt/disk4/</path>
</disk4>
<s3>
<type>s3</type>
...
</s3>
</disks>
<policies>
<ebs>
<volumes>
<default>
<disk>disk1</disk>
<disk>disk2</disk>
<disk>disk3</disk>
<disk>disk4</disk>
</default>
<s3>
<disk>s3</disk>
</s3>
</volumes>
</ebs>
</policies>
я ожидал, что по умолчанию он будет сохранять в volumes#default, а на s3 я смогу переносить вручную
как правило написать конфиг чтобы по умолчанию все улетало в нормальные диски, а в s3 либо по TTL либо вручную? -
из-за <move_factor> ? место кончилось и передвинулось?
move_factor — доля доступного свободного места на томе, если места становится меньше, то данные начнут перемещение на следующий том, если он есть (по умолчанию 0.1).
в логе кажется написано почему двигаем - 24 September 2021 (168 messages)
-
А как включить проверку по реальному времени выполнения запроса? Чтобы дольше заданного параметром времени запросы не выполнялись?
-
не понял вопроса, max_execution_time ?
-
Да, наверное оно, спасибо
-
ну или вам надо просто задать timeout_before_checking_execution_speed= побольше, тогда экстраполяция будет точнее оценивать
-
2021.09.24 03:35:25.731274 [ 347 ] {} <Error> auto DB::IBackgroundJobExecutor::execute(DB::JobAndPool)::(anonymous class)::operator()() const: Code: 236. DB::Exception: Cancelled mutating parts. (ABORTED), 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) @ 0x936713a in /usr/bin/clickhouse
1. DB::MergeTreeDataMergerMutator::checkOperationIsNotCanceled(DB::BackgroundProcessListEntry<DB::MergeListElement, DB::MergeInfo> const&) const @ 0x114dd29d in /usr/bin/clickhouse
2. DB::MergeTreeDataMergerMutator::writeWithProjections(std::__1::shared_ptr<DB::IMergeTreeDataPart>, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::__1::vector<std::__1::shared_ptr<DB::IMergeTreeProjection const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeProjection const> > > const&, std::__1::shared_ptr<DB::IBlockInputStream>, DB::IMergedBlockOutputStream&, long, DB::BackgroundProcessListEntry<DB::MergeListElement, DB::MergeInfo>&, std::__1::unique_ptr<DB::IReservation, std::__1::default_delete<DB::IReservation> > const&, std::__1::shared_ptr<DB::RWLockImpl::LockHolderImpl>&, std::__1::shared_ptr<DB::Context const>, DB::IMergeTreeDataPart::MinMaxIndex*) @ 0x114e685e in /usr/bin/clickhouse
3. DB::MergeTreeDataMergerMutator::mutateAllPartColumns(std::__1::shared_ptr<DB::IMergeTreeDataPart>, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::__1::vector<std::__1::shared_ptr<DB::IMergeTreeIndex const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeIndex const> > > const&, std::__1::vector<std::__1::shared_ptr<DB::IMergeTreeProjection const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeProjection const> > > const&, std::__1::shared_ptr<DB::IBlockInputStream>, long, std::__1::shared_ptr<DB::ICompressionCodec> const&, DB::BackgroundProcessListEntry<DB::MergeListElement, DB::MergeInfo>&, bool, bool, std::__1::unique_ptr<DB::IReservation, std::__1::default_delete<DB::IReservation> > const&, std::__1::shared_ptr<DB::RWLockImpl::LockHolderImpl>&, std::__1::shared_ptr<DB::Context const>) @ 0x114df340 in /usr/bin/clickhouse
4. DB::MergeTreeDataMergerMutator::mutatePartToTemporaryPart(DB::FutureMergedMutatedPart const&, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, DB::MutationCommands const&, DB::BackgroundProcessListEntry<DB::MergeListElement, DB::MergeInfo>&, long, std::__1::shared_ptr<DB::Context const>, std::__1::unique_ptr<DB::IReservation, std::__1::default_delete<DB::IReservation> > const&, std::__1::shared_ptr<DB::RWLockImpl::LockHolderImpl>&) @ 0x114da6db in /usr/bin/clickhouse
5. DB::StorageMergeTree::mutateSelectedPart(std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, DB::StorageMergeTree::MergeMutateSelectedEntry&, std::__1::shared_ptr<DB::RWLockImpl::LockHolderImpl>&) @ 0x116a6342 in /usr/bin/clickhouse
6. ? @ 0x116b42f8 in /usr/bin/clickhouse
7. ? @ 0x113dea37 in /usr/bin/clickhouse
8. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x93aae78 in /usr/bin/clickhouse
9. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()&&...)::'lambda'()::operator()() @ 0x93aca1f in /usr/bin/clickhouse
10. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x93a815f in /usr/bin/clickhouse
11. ? @ 0x93aba43 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 21.9.3.30 (official build)) -
Беда хелп плиз
-
Не стартует. Удалил очень много данных алтером
-
а где кусок лога про не стартует?
replicated таблица ? -
Удалил взлетело. Проще переналить чем разбираться
-
Коллеги, назрел такой вопрос. Можно ли примаунтить кастомный PVC к одному поду КХ в операторе? Смысл этого- хочу бэкапить раз в неделю фризом недельной партиции на определенной ноде КХ.
-
Доброе утро!
Поделитесь опытом миграции с синглноды на шардированный кластер, кто делал?
Я так понимаю, что от перезаливки данных никуда не деться?
План примерно такой:
- создать реплицированный, шардированный кластер
- пересоздать все таблицы в базах с движком в префиксе Replicated
- создать дистрибьютед таблицы
- залить данные -
PR в EN и RU версию остро приветсвуются в яндексе есть ребята которые только докой занимаются, но там я так понимаю у них кроме этой доки вагон и маленькая тележка всего...
-
перезаливка данных обязательна если вам надо чтобы кластер начал работать "равномерно", потому что вы single-node довели до больше 80% disk usage
у вас сколько данных сейчас?
если сотни гигабайт, то можно и перезалить через INSERT INTO distributed_table SELECT * FROM old_merge_tree_table -
До 10ти терабайт, какая альтернатива?
-
у вас одна нода на 10 терабайт?
-
ну...
какой движок базы сейчас Atomic или Ordinary? и какая версия clickhouse? -
Пока около 8ми. Версия свежая. 21.xx, сейчас не скажу.
-
реплицируемый - шардируемый кластер
вы хотите вместо одного сервера на 8 терабайт
4 сервера, по 2 в репликации и на каждом по 4 терабайта данных?
чтобы так сказать суммарный capacity оставить на уровне 16-20 терабайт? -
Мы хотим, горизонтальное масштабирование, увеличения объема, прирост производительности в вычислениях и при этом симлес миграцию, вот что мы хотим :)
-
все хотят
-
Это не реально? На самом деле программа минимум на сегодня - увеличить объём.
-
-
вы мне точно на вопрос то не ответили
сколько серверов то в итоге?
4 или 2? -
Два без реплик для старта, потом добавлять по мере необходимости.
-
ну ок.
без простоя для клиентов не получится
но "полной перезаливки" можно избежать
- ставим отдельно ZK или clickhouse-keeper - на отдельный сервер, или хотя бы чтобы на отдельный SSD диск снапшоты сливало
- ставим второй clickhouse
- создаем на обоих серверах пустые ReplicatedMergeTree таблицы + Distributed таблицы которые смотрят в эти новые таблицы , прописываем на обоих серверах <remote_servers>, Replicated нужно когда будете "реплики для отказоустойчивости подключать"
- правильно выбираем ключ шардирования для distributed чтобы грамотно наливать новые данные более менее равномерно и чтобы при этом данные были локальные относительно друг друга. то есть данные одного UserID например были на одном сервере например
- переключаем вставку на disttributed или сразу лучше в ReplicatedMergeTree с выбором сервера на клиенте лейте (будет быстрее)
- для старых данных, берем system.partitions WHERE table='old_table'
и делаем для каждого второго partition ALTER TABLE db.old_table MOVE PARTITION TO TABLE db.new_replicated_table
получаем на одном сервере данные разбитые на две таблицы
- теперь надо оставшиеся данные из MergeTree
перелить на новый сервер уже в ReplicatedMergeTree
это делаем паралельно запуская несколько запросов вида
INSERT INTO db.new_replicated_table SELECT * FROM remote() WHERE условие по дате
как то так
данные немного неравномерно будут
надеюсь у вас сеть между серверами хотя бы 10 гигабит? -
Спасибо. Выглядет как план, но если я понял вас правильно, то половину данных все равно прийдется перелить.
Как сделать "перебалансировку" шардов, когда появиться необходимость подключить третий шард в кластер? -
-
-
Первые строки комментариев в этих файлах:
https://github.com/ClickHouse/clickhouse-odbc/blob/master/packaging/odbc.ini.sample
https://github.com/ClickHouse/clickhouse-odbc/blob/master/packaging/odbcinst.ini.sampleclickhouse-odbc/odbc.ini.sample at master · ClickHouse/clickhouse-odbcODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
Понял, спасибо
-
-
-
да, 50% данных придется слить на второй сервер
и размытие будет скорее всего не очень равномерным
старые данные не забудьте удалить после INSERT ... SELECT .. FROM remote()
IMHO Rabbit много данных не сможет аккумулировать... раздавать потом замаетесь IMHO, но не настаиваю. у меня нет столько опыта с ним, чтобы утверждать 100%
я лично вообще предпочитаю на s3 файлы положить =)
насчет ре-шардинга, планы есть, сроков нет и рук
подписываемся наблюдаем
https://github.com/ClickHouse/ClickHouse/issues/13574Self-balancing architecture: Moving parts between shards · Issue #13574 · ClickHouse/ClickHouseIssue: So far ClickHouse as a data store shifts the responsibility of the balancing to an operator to provide inbound data flow in a balanced manner - that is to say, once data is written to any of...
-
а зачем вам из Debian ходить в clickhouse по ODBC?
у вас Tableau Server? или еще какая то тула которая под Linux и ей надо ODBC источник? -
Коллеги, а есть готовые кейсы по бэкапированию БД по партициям в кубере?
-
нет
такого нет -
спасибо, тогда будем думать\пилить что-то сами
-
clickhouse-backup такое не умеет
может быть через http://k8up.io как нибудь можно извратиться делать инкрементальный бекап, но нет гарантий восстановления -
получится что нибудь годное, дайте знать
-
https://velero.io/ - почти тоже самое, судя по about
-
всем привет, подскажите почему такой запрос
select toDecimal32(100.0 * t1.fieldA / nullIf(t1.fieldB, 0), 2)
выдает ошибку
SQL Error [407]: ClickHouse exception, code: 407, host: 127.0.0.1, port: 36011; Code: 407, e.displayText() = DB::Exception: Decimal convert overflow. Cannot convert infinity or NaN to decimal: while executing 'FUNCTION toDecimal32(divide(multiply(100., fieldA), nullIf(fieldB, 0)) :: 29, 2 :: 41) -> toDecimal32(divide(multiply(100., fieldA), nullIf(fieldB, 0)), 2) Nullable(Decimal(9, 2)) : 39' (version 21.8.4.51 (official build))
если не выбирать по этому полю, то fieldA и fieldB исключительно нули в выборке
это какой-то глюк КХ? -
это деление на ноль и infinity в качестве результата
nullIf 0 возвращает для null
в t1.fieldB -
nullif != ifnull
https://clickhouse.com/docs/ru/sql-reference/functions/functions-for-nulls/#nullifФункции для работы с Nullable-аргументами | Документация ClickHouseФункции для работы с Nullable-аргументами isNull Проверяет является ли аргумент NULL. isNull(x) Синоним: ISNULL. Аргумен
-
Коллеги, добрый день
Пытался найти в чате, нашел много похожего, но мне это не помогло. Если что сорри за дублирование
Пишу файл в Distributed таблицу, под которой лежат ReplicatedMergeTree
getStatement()
.write()
.sql(
"insert into table select '123' as id, * from input('value String')"
)
.format(ClickHouseFormat.CSV)
.data(inputStream)
в логах клика вижу ошибку Too many partitions for single INSERT block (more than 100)
как работает в данном случае data? и есть ли какой-то способ тут задать размер батча? или нужно самому делать инсерт через preparedStatement и addbatch? -
Неа, nullif null же возвращает в случае 0
-
тут data не причём, вы пытаетесь вставить данные в которых уникальных значений вашего ключа партиционирования больше чем 100, так делать крайне не рекомендуется. Старайтесть вставлять данные так, чтобы они ложились в 1 партицию
-
но у меня таблица как раз по id партицирована. и для этого файла одна партиция получается
-
получается что так, а покажите какой SQL генерится на выходе?
-
Да, у нас Tableau Server на дебиане
-
@den_crane yest idei?
https://t.me/clickhouse_ru/231988【D】【J】 in ClickHouse не тормозитдобрый день. можно ли как нибудь КХ заставить части UNION-ALL обрабатывать последовательно (непараллельно)? по одному подзапросы нормально влезают в память, но когда происходит UNION ALL там начинается спиллы из-за max_bytes_before_external_group_by в самих подзапросах. структура запроса (если поможет) https://controlc.com/ccc0b543
-
in query: INSERT INTO db.table_local (id, value) VALUES)
-
Всем добрый день! Может не много не по теме, т к. это не кликхаус...но может кто нибудь может объяснить почему не работает запрос?
-
-
это похоже как distributed отправляет на шард внутри самого КХ, но вы отправляете в distributed, вот этот запрос интересен
-
ну вот то что я выше кидал, он один в один
только названия отвязанные от сути
getStatement()
.write()
.sql(
"insert into tableName select '123' as id, * from input('value String')"
)
.format(ClickHouseFormat.CSV)
.data(inputStream) -
вы уверены, что там можно два значение в IN подставлять?
-
Теоретически можно
-
значит если у вас в table_local стоит PARTITION BY id, такой ошибки не должно быть
-
ну проверьте на тестовом наборе без подзапроса, подставьте туда реальные значения.
-
PARTITION BY segment_id ORDER BY segment_id
а он точно должен весь этот stream отправлять одним батчем? -
сделайте все одной строкой и перепроверьте, скорее всего интерфейс глючит
-
Попробуйте оба поля преобразовать в строку и сконкатенировать и IN делать по одному полю, это менее эффективно, но должно работать
-
запрос правильный, не надо так...
-
был бы правильный, небыло бы ошибки ))
-
даже если 1000 батчей, ошибка если и будет, то не такая
для ясности segment_id == id из примера?) -
да)
раньше думал что эта ошибка из-за большого количества вставок -
Если слишком часто вставлять может быть что-то типа
DB::Exception: Too many parts (600). Merges are processing significantly slower than inserts -
а где, кстати, проходит эта граница "слишком часто"? при потоке 5-10к записей в минуту вставлять каждые 10 секунд ок?
-
ну таблица точно партицирована по этому полю.
запрос вида
select partition from system.parts выдает значения этих полей -
Привет! Подскажите, а если на кликхаус сервере есть две database с таблицами, можно ли джоинить между собой таблицы из разных database?
-
можно
-
круто, а для этого просто джоин без каких-либо ухищрений писать?
-
да, только имя базы добавлять перед именем таблицы
-
спасибо большое!
-
странно, но если вставлять вот так
.table("db.tableName")
.format(ClickHouseFormat.CSV)
.data(file.getInputStream())
то ошибок нет, и данные вставляются полностью -
ClickHouse/ClickHouse description changed: v21.9.4.35-stable
Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v21.9.4.35-stable
Release notes:
ClickHouse stable release v21.9.4.35-stableRelease v21.9.4.35-stable · ClickHouse/ClickHouseClickHouse stable release v21.9.4.35-stable
-
а что у вас в файле? только 1 колонка value?
-
Ну вообще да
А сейчас я для теста добавил колонку с id и загрузил таким способом -
а в старом варианте пробовали вставлять 10-20 записей в файле? нормально всё пишется?
-
Если мало записей то все ок, на каком объеме начинается эта хрень пока не понял
-
Но тестирую на файле 20мб, около 1млн строк
-
Ребят, а есть какой нибудь туториал, как правильно построить вставку через kafka с нуля с настройкой самой kafka? Как мы сможем убедиться, что данные, запрошенные из кафки нигде не потерялись? Как правильно выбрать количество разделов в теме Кафки? Сориентируйте пожалуйста
-
-
а, извините , не выспался
это не получает в итоге NaN на который тоже ругается? =( -
путем боли и страдания
решардинга в clickhouse нет
https://github.com/ClickHouse/ClickHouse/issues/13574Self-balancing architecture: Moving parts between shards · Issue #13574 · ClickHouse/ClickHouseIssue: So far ClickHouse as a data store shifts the responsibility of the balancing to an operator to provide inbound data flow in a balanced manner - that is to say, once data is written to any of...
-
-
-
ну у вас дедупликация означает что из двух и более с трок с одинаковым значение DEDUPLICATE BY колонки
будет выбрана одна
если у вас Null
то из всех строк в которых колонка Null будет выбрана какая нибудь первая строка в data part -
Добрый день, в запросе есть фильтрация по nested полю - hasAny(nested.fieldName, ('fieldName1', 'fieldName2', ...)). Поле LowCardinality(String).
Наименований фильтров может быть десятки. Есть ли способы заменить эту конструкцию с целью повысить быстродействие? Пробовал ARRAY JOIN - стало хуже. -
из за чего могут данные не реплироваться
-
хотя все таблицы создались на обоих репликах
-
А можно хотя бы направить в правильную сторону, как все делают? Переставать лить данные на старые шарды? Руками выравнивать данные?
-
да
либо новые данные только на новый шард
но сильно зависит от локальности данных
либо новые данные равномерно на шарды
и потихоньку растакивать через DETACH PART
копировать руками на новый хост
и там делать ATTACH PART в пустую таблицу и делать INSERT INTO основная таблица SELECT * FROM временная
и дропать временную таблицу -
Понял, спасибо
-
nested реализована как отдельная колонка
можно попробовать применить data skip indexes типа bloom применить
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#available-types-of-indices
и вместо hasAny применить IN
но тут сильно зависит от того насколько данные размазаны, если равномерно во всех партах искомые значения встречаются, то не поможетMergeTree | ClickHouse DocumentationMergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine
-
system.macros
разные на обоих хостах?
в логах что при вставке появляется? -
на обоих
-
а как логи посмотреть
-
tail -f /var/log/clickhouse-server/clickhouse-server.err.log
-
Спасибо, попробуем
-
2021.09.24 13:13:30.063477 [ 12849 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Found part 20210809_0_4_1 on 64.225.98.180 t
hat covers the missing part 20210809_4_4_0
2021.09.24 13:13:30.063512 [ 12836 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking part 20210809_3_3_0
2021.09.24 13:13:30.063956 [ 12836 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking if anyone has a part 20210809_3_3_0
or covering part.
2021.09.24 13:13:30.064742 [ 12836 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Found part 20210809_0_4_1 on 64.225.98.180 t
hat covers the missing part 20210809_3_3_0
2021.09.24 13:13:30.064777 [ 12858 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking part 20210809_2_2_0
2021.09.24 13:13:30.065199 [ 12858 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking if anyone has a part 20210809_2_2_0
or covering part.
2021.09.24 13:13:30.065986 [ 12858 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Found part 20210809_0_4_1 on 64.225.98.180 t
hat covers the missing part 20210809_2_2_0
2021.09.24 13:13:30.066033 [ 12806 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking part 20210809_1_1_0
2021.09.24 13:13:30.066486 [ 12806 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking if anyone has a part 20210809_1_1_0
or covering part.
2021.09.24 13:13:30.067204 [ 12806 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Found part 20210809_0_4_1 on 64.225.98.180 t
hat covers the missing part 20210809_1_1_0
2021.09.24 13:13:30.067242 [ 12749 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking part 20210809_0_0_0
2021.09.24 13:13:30.067735 [ 12749 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Checking if anyone has a part 20210809_0_0_0
or covering part.
2021.09.24 13:13:30.068671 [ 12749 ] {} <Warning> default.ch_replicated_local (R
eplicatedMergeTreePartCheckThread): Found part 20210809_0_4_1 on 64.225.98.180 t
hat covers the missing part 20210809_0_0_0 -
чет такое
-
там логи ссыпались пипец... пришлось последние 30
-
_1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >
const&, std::__1::optional<DB::CurrentlySubmergingEmergingTagger>*, bool, std::_
_1::shared_ptr<DB::IDisk>) @ 0x113e7ff3 in /usr/bin/clickhouse
12. ? @ 0x11289fe5 in /usr/bin/clickhouse
13. DB::StorageReplicatedMergeTree::fetchPart(std::__1::basic_string<char, std::
__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr
<DB::StorageInMemoryMetadata const> const&, std::__1::basic_string<char, std::__
1::char_traits<char>, std::__1::allocator<char> > const&, bool, unsigned long, s
td::__1::shared_ptr<zkutil::ZooKeeper>) @ 0x111ebe71 in /usr/bin/clickhouse
14. DB::StorageReplicatedMergeTree::executeFetch(DB::ReplicatedMergeTreeLogEntry
&) @ 0x111e3f03 in /usr/bin/clickhouse
15. DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEn
try&) @ 0x111c1f0f in /usr/bin/clickhouse
16. ? @ 0x1128709f in /usr/bin/clickhouse
17. DB::ReplicatedMergeTreeQueue::processEntry(std::__1::function<std::__1::shar
ed_ptr<zkutil::ZooKeeper> ()>, std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEn
try>&, std::__1::function<bool (std::__1::shared_ptr<DB::ReplicatedMergeTreeLogE
ntry>&)>) @ 0x11639ecc in /usr/bin/clickhouse
18. DB::StorageReplicatedMergeTree::processQueueEntry(std::__1::shared_ptr<DB::R
eplicatedMergeTreeQueue::SelectedEntry>) @ 0x1120eebd in /usr/bin/clickhouse
19. ? @ 0x113dea37 in /usr/bin/clickhouse
20. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<Threa
dFromGlobalPool, void*>) @ 0x93aae78 in /usr/bin/clickhouse
21. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlo
balPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optiona
l<unsigned long>)::'lambda0'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool
>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsig
ned long>)::'lambda0'()&&...)::'lambda'()::operator()() @ 0x93aca1f in /usr/bin/
clickhouse
22. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1:
:thread, void*>) @ 0x93a815f in /usr/bin/clickhouse
23. ? @ 0x93aba43 in /usr/bin/clickhouse
24. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
25. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.9.3.30 (official build)) -
вот еще какая то тема
-
какими пачками вставляете?
выглядит так что вставляете слишком часто
оно успевает смержиться на реплике
потом вторая реплика запрашивает парты с соседней
и ей говорят а вот тут уже результат мержа есть, тащи новое
данные реплицируются
еще есть какие то ошибки? -
по одной строке сразу друг за другом
-
давайте =) учитесь копипастить не только stack tace c 12 строчки
но и то что там выше с причиной ошибки -
извините, вам не нужен clickhouse ;)
не надо так делать
https://clickhouse.com/docs/ru/sql-reference/statements/insert-into/#zamechaniia-o-proizvoditelnostiINSERT INTO | Документация ClickHouseINSERT Добавление данных. Базовый формат запроса: INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v2
-
вставляйте пачками
-
да я в курсе) там просто тестовое задание... в
-
в ломы файл csv создавать😂
-
я руками крч просто в клиенте вставлял
-
хотя один раз прокановало
-
в общем смотрите в логи, читайте внимательно там все написано
-
Можно ли при создании словаря из монги "размножить" столбец на два (с дублирующимися данными)?
-
-
скобки? там же by expression
-
сделал как в примере
https://clickhouse.com/docs/ru/sql-reference/statements/optimize/
OPTIMIZE TABLE table DEDUPLICATE BY colX,colY,colZ; -
engine = MergeThree ?
-
-
Подскажите аналитику, как подключиться к clickhouse из AirFlow?
Вроде как вот ссылка: https://github.com/whisklabs/airflow-clickhouse-plugin. Но после проделывания этого упражения в Conn Type во вкладке connections не появляется заветное слово clickhouseGitHub - whisklabs/airflow-clickhouse-plugin: Airflow ClickHouse Plugin based on clickhouse-driverAirflow ClickHouse Plugin based on clickhouse-driver - GitHub - whisklabs/airflow-clickhouse-plugin: Airflow ClickHouse Plugin based on clickhouse-driver
-
новый conn type и не появится, можете указать любой, например - http
-
у вас и в запросе BY разнесён на две строки?
-
Подскажите, плиз общие чаты по KeyValue базам данных если есть?
-
нет, в одну строку
-
ну тогда скиньте ошибку полностью
-
Syntax error: failed at position 51:
OPTIMIZE TABLE general_stat_dev FINAL DEDUPLICATE BY event_date, event_type, source_transaction_uid;
Expected one of: INTO OUTFILE, FORMAT -
сильно старая версия кликхауса?
-
20.10.3 revision 54441
-
🇩 🇪 🇰 🇴 🇧 🇷 🇦 🇿 MARKET PLACE
ПРИВЕТСТВУЮ ТЕБЯ МОЙ ДРУГ, ТЫ ПОПАЛ НА САМЫЙ БОЛЬШОЙ МАРКЕТ ПЛЕЙС В ТЕЛЕГРАМ. "DEKOBRAZ MP" ОБЪЕДИНЯЕТ БОЛЕЕ 10000 КАНАЛОВ ПО ПРОДАЖЕ, АРЕНДЕ, РАБОТЕ И ПРЕДОСТАВЛЕНИИ РАЗНОГО РОДА УСЛУГ. МОЖЕШЬ СТАТЬ КАК ПРОДАВЦОМ, ТАК И ПОКУПАТЕЛЕМ. Админ @volkowdmitriy
-
🇩 🇪 🇰 🇴 🇧 🇷 🇦 🇿 MARKET PLACE
ПРИВЕТСТВУЮ ТЕБЯ МОЙ ДРУГ, ТЫ ПОПАЛ НА САМЫЙ БОЛЬШОЙ МАРКЕТ ПЛЕЙС В ТЕЛЕГРАМ. "DEKOBRAZ MP" ОБЪЕДИНЯЕТ БОЛЕЕ 10000 КАНАЛОВ ПО ПРОДАЖЕ, АРЕНДЕ, РАБОТЕ И ПРЕДОСТАВЛЕНИИ РАЗНОГО РОДА УСЛУГ. МОЖЕШЬ СТАТЬ КАК ПРОДАВЦОМ, ТАК И ПОКУПАТЕЛЕМ. Админ @volkowdmitriy
-
-
сильно. на 20.4.5.36 точно не работает, а на последней - ок
-
-
понял. спасибо
-
Есть ли какие-нибудь практические проблемы с высоким фактором репликации? Допустим 10. Данных мало, но нужно держать много запросов.
-
-
премного благодарен)
-
Коллеги, всем добрый вечер. Мне нужно для каждой строки выполнить подзапрос, который вернет кол-во строк по определенным условиям. Запрос выполняется, но числа неверные и везде одинаковые.
Что я делаю не так? Достаточно ли понятно я объяснил проблему?
select *,
(select count(*)
from human_region_coverage sq
where sq.pos_start >= pos_start
and sq.pos_end <= pos_end
and sq.dp = 0
and workflow_id = '72a307e0-c7c3-4d4d-a892-0c003d6c8d1f'
) sq
from human_region_coverage
where workflow_id = '72a307e0-c7c3-4d4d-a892-0c003d6c8d1f'; -
попробуйте добавить алиас для второй таблицы и использовать этот алиас в подзапросе вместо просто имени колонки
-
Таблица здесь одна и та же. Попробовал добавить алиас для основного from. Ошибка: Outer query column
-
ну собственно вот вам и ответ,судя по всему ваше условие в подзапросе использует колонку из другой таблицы и соответсвенно условие всегда срабатывает одинаково. попробуйте ASOF JOIN
-
А чем это отличается от group by?
-
Не совсем понял, про что вы. Мне нужно для каждой строки выполнить подзапрос, у которого в условии фигурирует значение из самой строки.
В SQL не силен, но надеюсь достаточно точно сформулировал то, что нужно -
а не проще вывести в отдельный столбец ваш подзапрос и его применить его к строке ?
-
Почему ты не пропишешь select workflowid,count(*) from … where … group by workflow
-
мне нужна колонка, которая будет содержать кол-во строк из подзапроса. Причем тут group by я не очень понимаю
-
я вроде так и пытаюсь, нет?
-
select t1.*,sq.*
from human_region_coverage t1
JOIN (select count(*)
from human_region_coverage sq
where sq.pos_start >= pos_start
and sq.pos_end <= pos_end
and sq.dp = 0
and workflow_id = '72a307e0-c7c3-4d4d-a892-0c003d6c8d1f'
) sq on sq."""" = t1."""
where workflow_id = '72a307e0-c7c3-4d4d-a892-0c003d6c8d1f'; -
судя по всему вам лучше сделать 2 отдельных запроса и забить
-
4500 не буду переводить т.к это не мне надо
-
ну и правильно :) лучше сэкономить
-
Как ты необычно cros join сделал )
-
обычный подзапрос нельзя параметризировать переменными из текущей строки. Оно так не работает в классическом SQL. Тут нет "функций" как в процедурных языках, готовых залезть грязными руками куда угодно. При вычислении выражений select вам доступны значения только текущей строки. Это больше похоже на функциональные языки программирования.
Чтобы в рамках формирования строки выдачи посмотреть на соседей (да хоть бы и на всех - от верха до низа) используется относительная новация в SQL - оконные функции. Там специальным синтаксисом можно сделать необходимые выборки-группировки, чтобы посчитать все что вам нужно, и использовать при вычислении значений в текущей строке. -
Спасибо!
-
-
Доброго времени суток всем пользователям кликхауса! Я счастлив, что нашел этот канал, потому что уже не знаю, что гуглить для решения своей задачи) Я не очень опытен с кх (пара-тройка месяцев), поэтому плохо ориентируюсь в доке, поэтому буду рад любым советам!
Моя задача:
Существует таблица (raw), в которой есть ежедневные данные товаров
Необходимо создать таблицу, в которой будут аггрегированные данные то товарам за последние 30 дней materialized view
Идея в том, чтобы при вставке строки в raw материализованное представление обновлялось в соответствии с новыми данными
аггрегация состоит из anyLast, countIf, sum
не получается это сделать, так как в интернете очень мало информации об этом и в документации для materialized view вообще нет юзкейсов
как вообще организовать хранение аггрегированных данных по исходникам только за последний час/день/неделю/месяц/год итд? -
anyLast не детерменированная функция, ИМХО лучше какой-нибудь argMax c timestamp
-
-
рекомендую ещё ознакомиться с этим материалом
https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597
https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf -
а в materialized view можно разве ttl использовать?
-
мат вью это просто триггер на инсерт, который запускает запрос на данных и инсертит в другую табличку
-
мне нужно имеено сделать аггрегацию
в исходной таблице 3b записей товаров по дням, а в аггрегированной табличке нужно сгруппитовать 8m товаров со статой за последний месяц -
посмотри доклад
-
хорошо, спасибо)
-
также можно почитать https://kb.altinity.com/
там правда вроде нет инфы для твоего кейса, но куча примеров для других разных типовых кейсов -
окей
mv - это триггер на insert для перегона данных из одной таблицы в другую в своем исходном состоянии или частично аггрегированные
мне вообще не представляется возможным с помощью триггера на вставку с аггрегацией count() и sum() за период, так как count() увеличивает счетчик строк, а sum() увеличивает значение. Если ttl строки сработает и строка удалится, то count() не уменьшится на 1, а sum() не пересчитается, как я понимаю
тогда уж проще по крону удалять mv, таблицу и создавать заново + заполнять через populate, но тут даже без документации понятно, что идея не очень хорошая 😐 - 25 September 2021 (61 messages)
-
Можно сделать агрегацию по дням, навесить TTL на дни, а в запросе просто агрегировать нужное количество дней.
Проблема будет только с uniq (если нужен) - тут, наверное, придётся массив уникальных значений хранить на каждый день. -
-
-
Вы наверное делаете MV не просто так, а чтобы ускорить какой-то запрос? Сколько времени у вас идет запрос по raw data? С какими order by / partition by ? На каких дисках? Правильно ли работает prewhere ? Может можно обойтись и без сложностей с MV?
Однако если у вас приходит миллиард записей за 30 дней, и нужно делать аггрегаты по 100 колонкам, то конечно без MV не обойтись. В этом случае в MV стоит положить аггрегированные записи по дням. Получится 30 строк. И вот по этим строкам вы и сделаете финальную аггрегацию в своем запросе - это будет быстро.
Можно аггрегировать за 30 дней, можно за год по месяцам - как угодно. Никаких TTL тут не нужно. anyLast & sum & countIf проблем не создатут при таком подходе. -
вставляю пачкой нифига.... также на первой реплике
-
только
-
-
2021.09.25 06:20:46.524772 [ 10058 ] {} <Error> DNSResolver: Cannot resolve host (ch1.8616a0fdc182dc727996fa1e99aed405), error 0: ch1.8616a0fdc182dc727996fa1e99aed405.
2021.09.25 06:20:46.525103 [ 10058 ] {} <Error> default.ch_replicated_local (4a673db1-ec5e-4058-8a67-3db1ec5ed058): auto DB::StorageReplicatedMergeTree::processQueueEntry(ReplicatedMergeTreeQueue::SelectedEntryPtr)::(anonymous class)::operator()(DB::StorageReplicatedMergeTree::LogEntryPtr &) const: Code: 198. DB::Exception: Not found address of host: ch1.8616a0fdc182dc727996fa1e99aed405. (DNS_ERROR), Stack trace (when copying this message, always include the lines below):
как это лечить -
Похоже что реплика не может достучаться просто до другой
-
Добрый день, спасибо за содержательный ответ
в raw таблице уже хранятся данные по дням (6-12млн уникальных товаров каждый день) -> 200-300 млн строк на запрос (~5-6c)
например,
артикул, категория, дата (yyyy-mm-dd), цена, продано, выручка, остаток
PARTITION BY toMonday(date), ORDER BY (date, category, article)
задача состоит в том, чтобы получить список артикулов по фильтрам от до:
цена,
объем продаж за месяц (сегодня - 30 дней),
объем выручки за месяц (сегодня - 30 дней),
количество дней, когда товар был в продаже за месяц (сегодня - 30 дней),
упущенная выручка за месяц (сегодня - 30 дней)
то есть выходит что:
исходные данные находятся в предаггрегатном состоянии
период анализа плавающий (смещение на день)
в идеальном случае необходимо довести 200-300млн строк за 30 дней к 8-12 млн строкам, где артикул и статистика за последние 30 дней, чтобы по ним сделать быструю выборку
— next step is filtering result by range conditions
WITH
date_sub(DAY, 30, today()) AS dateMonthAgo,
date_diff(MONTH, dateMonthAgo, today()) AS period,
count(remain > 0) AS daysInStock,
sum(sold * salePromoPrice) AS periodRevenue
SELECT
-- get aggregated filter values
article,
sum(sold) AS periodSold,
periodRevenue,
argMax(feedbackCount, date) AS reviewsCount,
argMax(salePromoPrice, date) AS finalPrice,
daysInStock,
periodRevenue / daysInStock * period AS periodLostProfit
FROM prod.big_article_stats
WHERE date >= dateMonthAgo
GROUP BY article -
сходу меняем :
- PARTITION BY toMonday(date), ORDER BY (date, category, article) на
- PARTITION BY toYYYYMM(date), ORDER BY (category, article, date) или ORDER BY (article, category, date)
почему так - устали объяснять, ищите в истории канала.
после этого смотрим на скорость - должно полегчать на секунду-другую. Пробуем optimize_aggregation_in_order - может будет лучше, а может и нет.
Если мало, то делаем в MV аггрегаты за 1 день (group by day, article) , и уже по ним гоняем финальный group by article -
хорошо, а движок mv какой использовать?
-
aggregating - вы же хотите, чтобы все последовательные вставки собрались в дневные аггрегаты
-
Понял.
Спасибо большое! -
Всем привет! Подскажите, пожалуйста, как решить такую проблему:
КХ падал, судя по всему во время мерджа, по нехватке памяти. Ограничили max_server_memory_usage. После этого реплика поднялась, но стали сыпаться подобные ошибки по поводу множества партов:
Code: 84. DB::Exception: Directory /var/lib/clickhouse/disks/s3_cold_volume/store/505/505524e0-3157-441b-9055-24e03157041b/tmp_merge_202109_56469_57597_16/ already exists. (DIRECTORY_ALREADY_EXISTS)
Не придумал ничего лучше, чем попробовать вручную удалить директроию. После этого в логах видно, что КХ создал директорию заново и начал туда писать. Через какое-то время всё заканчивается такими логами и возвращается к ошибке DIRECTORY_ALREADY_EXISTS:
2021.09.25 09:52:19.992802 [ 249 ] {} <Debug> DiskS3: Write to file by path: /var/lib/clickhouse/disks/s3_cold_volume/store/505/505524e0-3157-441b-9055-24e03157041b/tmp_merge_202109_56469_57597_16/primary.idx. S3 path: clickhouse-production/erkzvppcvzswilizzifmvkwrhhdpmebz
2021.09.25 09:52:19.992852 [ 249 ] {} <Debug> WriteBufferFromS3: Making single part upload. Bucket: chstorage-ch-prod-n1, Key: clickhouse-production/erkzvppcvzswilizzifmvkwrhhdpmebz, Size: 0
2021.09.25 09:52:19.992865 [ 249 ] {} <Debug> WriteBufferFromS3: Skipping single part upload. Buffer is empty.
2021.09.25 09:52:20.012740 [ 249 ] {} <Error> std::optional<bool> DB::IMergeTreeDataPart::keepSharedDataInDecoupledStorage() const: There is a problem with deleting part 202109_56469_57597_16 from filesystem: Code: 73. DB::Exception: Failed to read metadata file. (UNKNOWN_FORMAT), 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&, DB::Exception const&, int) @ 0x9367035 in /usr/bin/clickhouse
1. DB::IDiskRemote::Metadata::Metadata(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&, bool) @ 0x1065fbb3 in /usr/bin/clickhouse
2. DB::IDiskRemote::getUniqueId(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const @ 0x10666407 in /usr/bin/clickhouse
3. DB::DiskDecorator::getUniqueId(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const @ 0x10679211 in /usr/bin/clickhouse
4. DB::DiskRestartProxy::getUniqueId(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const @ 0x1067cd97 in /usr/bin/clickhouse
5. DB::IMergeTreeDataPart::getUniqueId() const @ 0x1142c69b in /usr/bin/clickhouse
6. DB::StorageReplicatedMergeTree::unlockSharedData(DB::IMergeTreeDataPart const&) const @ 0x1126fd02 in /usr/bin/clickhouse
7. DB::IMergeTreeDataPart::keepSharedDataInDecoupledStorage() const @ 0x114106ad in /usr/bin/clickhouse
8. DB::IMergeTreeDataPart::remove() const @ 0x11411cd9 in /usr/bin/clickhouse
9. DB::IMergeTreeDataPart::removeIfNeeded() @ 0x1140f6e0 in /usr/bin/clickhouse
10. DB::MergeTreeDataPartWide::~MergeTreeDataPartWide() @ 0x11518b93 in /usr/bin/clickhouse -
11. DB::MergeTreeDataMergerMutator::mergePartsToTemporaryPart(DB::FutureMergedMutatedPart const&, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, DB::BackgroundProcessListEntry<DB::MergeListElement, DB::MergeInfo>&, std::__1::shared_ptr<DB::RWLockImpl::LockHolderImpl>&, long, std::__1::shared_ptr<DB::Context const>, std::__1::unique_ptr<DB::IReservation, std::__1::default_delete<DB::IReservation> > const&, bool, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, DB::MergeTreeData::MergingParams const&, DB::IMergeTreeDataPart const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x114d6490 in /usr/bin/clickhouse
12. DB::StorageReplicatedMergeTree::tryExecuteMerge(DB::ReplicatedMergeTreeLogEntry const&) @ 0x111d14b9 in /usr/bin/clickhouse
13. DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry&) @ 0x111c0c2d in /usr/bin/clickhouse
14. ? @ 0x112857ff in /usr/bin/clickhouse
15. DB::ReplicatedMergeTreeQueue::processEntry(std::__1::function<std::__1::shared_ptr<zkutil::ZooKeeper> ()>, std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::__1::function<bool (std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>) @ 0x1163766c in /usr/bin/clickhouse
16. DB::StorageReplicatedMergeTree::processQueueEntry(std::__1::shared_ptr<DB::ReplicatedMergeTreeQueue::SelectedEntry>) @ 0x1120d61d in /usr/bin/clickhouse
17. ? @ 0x113dd177 in /usr/bin/clickhouse
18. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x93aabb8 in /usr/bin/clickhouse
19. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()&&...)::'lambda'()::operator()() @ 0x93ac75f in /usr/bin/clickhouse
20. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x93a7e9f in /usr/bin/clickhouse
21. ? @ 0x93ab783 in /usr/bin/clickhouse
22. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
23. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.9.2.17 (official build)) -
> КХ падал, судя по всему во время мерджа, по нехватке памяти.
Перефразирую. Контейнер с КХ убивался по превышению лимита по памяти -
Здравствуйте, подскажите пожалуйста. Пишу в clickhouse из clickhouse-go небольшое количество данных (раз в минуту, примерно 200-300 записей). Но когда начинается запись, он потребляет 100% cpu. В документации не нашел информации о том, как узнать чем он нагружен. Куда можно покопать?
-
в логах вот такое:
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x8f9a2ba in /usr/bin/clickhouse
1. DB::TCPHandler::receiveHello() @ 0x10fe01ff in /usr/bin/clickhouse
2. DB::TCPHandler::runImpl() @ 0x10fd9278 in /usr/bin/clickhouse
3. DB::TCPHandler::run() @ 0x10fecb99 in /usr/bin/clickhouse
4. Poco::Net::TCPServerConnection::start() @ 0x13b63c6f in /usr/bin/clickhouse
5. Poco::Net::TCPServerDispatcher::run() @ 0x13b656fa in /usr/bin/clickhouse
6. Poco::PooledThread::run() @ 0x13c98579 in /usr/bin/clickhouse
7. Poco::ThreadImpl::runnableEntry(void*) @ 0x13c9480a in /usr/bin/clickhouse
8. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
9. __clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.8.5.7 (official build))
2021.09.25 09:37:14.338502 [ 211 ] {} <Error> ServerErrorHandler: Code: 101, e.displayText() = DB::NetException: Unexpected packet from client, 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) @ 0x8f9a2ba in /usr/bin/clickhouse
1. DB::TCPHandler::receiveHello() @ 0x10fe01ff in /usr/bin/clickhouse
2. DB::TCPHandler::runImpl() @ 0x10fd9278 in /usr/bin/clickhouse
3. DB::TCPHandler::run() @ 0x10fecb99 in /usr/bin/clickhouse
4. Poco::Net::TCPServerConnection::start() @ 0x13b63c6f in /usr/bin/clickhouse
5. Poco::Net::TCPServerDispatcher::run() @ 0x13b656fa in /usr/bin/clickhouse
6. Poco::PooledThread::run() @ 0x13c98579 in /usr/bin/clickhouse
7. Poco::ThreadImpl::runnableEntry(void*) @ 0x13c9480a in /usr/bin/clickhouse
8. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
9. __clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.8.5.7 (official build)) -
https://github.com/ClickHouse/clickhouse-go/issues/322
попробуй писать через буффер, не уверен правда что поможет -
да я пишу в него килобайты
-
и редко, а он сразу грузит на 100%
-
Господа, подскажите сколько всего таблиц можно создать в КХ ?
-
Я подозреваю, что если и есть лимиты - очень много)
-
А почему у вас такой вопрос возник кстати?
-
Я знал что кто нибудь это спросит)) Но у меня такая ситуация, я делаю конструктор telegram ботов. Другие пользователи делают себе ботов на моем конструкторе. Хочу дать им возможность писать свою стату в таблицу КХ. Возникла мысль сделать сделать для каждого подключенного к конструктору бота, свою таблицу. Чтобы можно было быстро чистить(удалять) стату одного конкретного бота.
-
Как вариант - запустить в докере кх и в инфинит лупе создавать таблицы. Но я думаю, что, скорее всего, можно упереться в хардварную часть, чем в лимиты (если они есть) КХ
-
"инфинит луп" - это что?
-
бесконечный цикл наверн
-
Почему бы не писать всё в одну, и делать выборки по ботам?
-
Так он чистить хочет
-
чтобы когда удаляется один бот, можно было убрать его мусор
-
а у кликхауса есть мониторинг какой-то? как узнать почему он жрет цпу?
-
Вроде нет лимитов, но можете чекнуть конфиг на предмет такого...
-
Как вариант - глянуть system.queries. но там, вроде, только потребляемый рам есть
-
А зачем её удалять в принципе? Кажется в масштабах вообще всех данных, этот «мусор» - ерунда
-
Стата же на то и стата, что она чаще всего не удалятся, а просто ротируется
-
я уже вижу как через месяц после релиза фичи бегут юзеры и кричат: "как мне почистить стату, я все делал не правильно, хочу все начать с начала... памагите, спасите..." ))
-
ну кстати можно просто новые данные записывать с новым id, и сделать таблицу связей для всех id
-
это надо будет просить юзера переделать свой механизм записи статы, чтобы они там какой нибудь action_id поменяли чтобы по новой все пошло. Но я думаю они будут не довольны этим, и будут просить дать возможность почистить.
-
причем тут они, вы сделайте кнопку и на своей стороне меняйте, сделайте id_user, и к нему цепляйте id_stat
-
Может я кнчн не пониямаю логику приложения. Но кажется можно так поправить. Но вообще для таких задач с over много таблиц я бы не стал брать КХ. Может лучше посгрес.
-
Схема с бесконтрольным созданием таблиц и в случае с постгресом выглядит сомнительно, стоит подумать в сторону хранения всего в одной
-
всем спасибо, сделаю хранение в одной таблице.
-
👍🏻👍🏻👍🏻👍🏻👍🏻
-
-
Привет! Сюда с дебильными вопросами о функционале можно?
Есть ли какой-то способ гонять поиск по всем полям в таблице не костыляя адок? Сейчас сделал суперкостыльно — мне не нравится — но не могу впилить, могу ли я что-то удобное использовать для этого всего -
Если будет очень очень много таблиц кажется что будет очень очень много мержей запускаться и насиловать жесткие диски.
-
Ты про билдеры запросов?
https://github.com/the-tinderbox/ClickhouseBuilder
Вот такой можно заюзатьGitHub - the-tinderbox/ClickhouseBuilder: Fluent queries builder for Clickhouse. Also has integration with Laravel / Lumen.Fluent queries builder for Clickhouse. Also has integration with Laravel / Lumen. - GitHub - the-tinderbox/ClickhouseBuilder: Fluent queries builder for Clickhouse. Also has integration with Larave...
-
-
А я им пользуюсь, да. Я скорее про то, что я хочу по всем колонкам — SELECT * прогнать одну и ту же проверку через WHERE
-
Сейчас у меня адская костыль — список полей статикой в классе, который с логами работает — и собирается суперстремный запрос
-
У меня лично больше вопросов к тому, что Вы не экранируете эту строку :)
-
На локалочке для себя строю, в паблик не уходит
-
WITH [* APPLY x -> (x ILIKE '%a')] AS x
SELECT *
FROM
(
SELECT
'aaa' AS a,
'bbb' AS b,
'ccc' AS c
)
WHERE arrayExists(x -> x=1, x)
Query id: 797cba40-53c3-4343-8b6c-5e1df2d716e9
┌─a───┬─b───┬─c───┐
│ aaa │ bbb │ ccc │
└─────┴─────┴─────┘
1 rows in set. Elapsed: 0.007 sec.
https://github.com/ClickHouse/ClickHouse/issues/27877
Такое можно, но оно сомнительноColumn transformes support lambda for APPLY(x->argMax(x,number)) · Issue #27877 · ClickHouse/ClickHouseUse case APPLY could be useful for making queries cleaner, but it doesn't support functions with multiple arguments. And this feature request should make it possible to do. Describe the sol...
-
Ну тяжеть не пугает — это на суперредкий случай, когда не знаю где и что ищу. За пример/идею спасибо, попробую
-
Вместо * может быть COLUMNS с перечислением колонок
-
А правда, что словари из MongoDB не поддерживают подключение к репликасету, только к standalone?
-
Да
https://github.com/ClickHouse/ClickHouse/issues/4190Feature request: Add support for MongoDB clusters as external dictionaries · Issue #4190 · ClickHouse/ClickHouseRecently I stumbled upon a problem external dictionary (linked to MongoDB) was empty. There was nothing releted to the problem in clickhouse log, but in MongoDB log I found this: 2019-01-29T12:09:2...
-
печаль :(
спасибо -
еще один дебильный вопрос
как вывести вот эту информацию после запроса?
1 rows in set. Elapsed: 0.007 sec. + rows/s + mb/s|gb/s - 26 September 2021 (41 messages)
-
А почему бы и не сделать в одной таблице? Просто жестко партиционируйте по пользователю и можно будет чистку делать удалением партиций
-
-
Попробуйте навесить mv на .inner. таблице.
-
нет, это плохая идея. парты (так-же как и таблицы) - это подкаталоги. 10 000 подкаталогов убивают любую файловую систему, плюс сложность работы с таким количеством партов в самом КХ. Вобщем-то и 1000 подкаталогов обычно работает так себе. Так что не нужно делать много таблиц и партиционировать по пользователю.
-
Спасибо, помогло.
-
Найдите презентацию denny crane по materialized view
-
Привет, всем! В КХ новичок, не пинайте сильно. Из кафки есть два источника данных A и B. A соотносится с B по ключу, как один ко многим. Как слить эти два источника в одну денормализованную таблицу в КХ?
-
Нашел вот тут - https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf - но у меня таких таблиц '.inner.{mv-name}' нет. Есть только '.inner_id.{uuid}'. Видимо буду их отдельно создавать.
-
Не нужно,
У вас atomic движок бд
kb.altinity.com почитайте про движки баз данных -
Вообще сразу говорим, что лучше создавать мв используя синтаксис TO
-
Вставьте в две разные таблицы
Потом insert into … select … from … join
Еще есть materilize.io
Или benthos
Которые на своей стороне джойнят -
Это тоже самое но для database engine atomic
-
Received exception from server (version 21.9.4):
Code: 57. DB::Exception: Received from localhost:9000. DB::Exception: Mapping for table with UUID=8d88bf9d-977f-4708-8d88-bf9d977f4708 already exists. It happened due to UUID collision, most likely because some not random UUIDs were manually specified in CREATE queries.. (TABLE_ALREADY_EXISTS) -
никто не сталкивался при восстановлении
-
эта база пустая
-
-
тут сразу просится какой-то внешний ETL, плюс очень хочется чтобы один из потоков гарантированно опережал другой. Однако задачка сама по себе интересная, можно попробовать сделать что-то средствами КХ.
Отношение 1-ко-многим в КХ обычно решается через Nested/Arrays - мы вкладываем колонку в ячейку. Например так:
create table wide (
key UInt64,
a String,
b Array(String)
) engine =
Теперь настраиваем пару MV, которые получают данные из своего канала кафки, но пишут в единую таблицу вида AggregatingMT, заполняя неизвестные пока поля значением NULL:
при получении потока A добавляем строки с заполненными полями key & a
при получении потока B добавляем строки с заполненными полями key & b (+делаем group by / groupArray)
CREATE MATERIALIZED VIEW consumerB to wide
as
select key,NULL,groupArrayState(b)
from streamB
group by key
В табличке хранятся не значения, а стейты и она будет выглядеть так:
create table wide (
key UInt64,
a AggregateFunction(any,String),
b AggregateFunction(groupArray,Array(String))
) engine = AggregatingMergeTree() order by key
В процессе мерджей данные из разных пачек будут потихоньку сливаться в одну запись по единому ключу.
Тем не менее, гарантировать что процесс мерджей приведет к 1 записи нельзя, поэтому финальная выборка потребует окончательной сборки данных через group by key с точно такими-же аггрегациями:
select key, anyMerge(a), groupArrayMerge(b) from wide group by key
(написано как идея, SQL не проверял, считаем псевдокодом) -
Спасибо огромное! Буду пробовать
-
Ага, спасибо, разобрался. Создал вьюшки через TO
-
Всем привет, вопрос по materialized view , шо это за зверь?
Допустим у есть запрос, который работает около 2 минут
Но мне нужно данные тянуть в BI системки, я же правильно понимаю, что мне проще создать MV
и в BI сисетмы тянуть его? Но тогда вопрос, как задать ему время обновлений?
Где то кроме доки можно об этом почитать? -
-
Приветствую!
У меня есть примерно такая схема выдачи результатов:
1. сначала мы вытаскиваем несколько айди сущностей из нашей базы (скажем, их 1000)
2. потом при помощи запроса типа select id, ctr from table where id in (список из п.1) достаем их ctr и сортируем по нему
Мне бы хотелось, чтобы сущности, ctr которых пока не рассчитывался, тоже попадали в результат селекта.
Можно как-нибудь это сделать, не создавая временную таблицу? -
самый простой вариант через left join к айдишникам приджойнить ctr, вопрос только в производительности, насколько много там у вас данных
-
Коллеги, добрый вечер!
Столкнулся со следующей проблемой, может кто знает и сможет помочь:
Попытка обновить вьюху привела к тому, что кликхаус выдал ошибку таймаута JDBC-драйвера . После чего таймауты были увеличены, но теперь другую ошибку выдает:
Code: 159, e.displayText() = DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000001192 is executing longer than distributed_ddl_task_timeout (=180) seconds. There are 1 unfinished hosts (0 of them are currently active), they are going to execute the query in background (version 21.1.2.15 (official build)) -
ALTER TABLE .. ON CLUSTER ?
или
ALTER MATERIALIZED VIEW ... ON CLUSTER?
конвертирование типов было? что именно во вьюшке пытались поменять? -
Так:
CREATE OR REPLACE VIEW view_name ON CLUSTER 'cluster_name' AS
В целом запрос немного изменился: убрал некоторые поля и поменял источник в FROM -
а, обычная VIEW не materialized?
ну, ошибка говорит что какая то из реплик не смогла за заданное время VIEW заменить
извините я просто не помню сейчас есть там какая то блокировка или нет
у вас из этой VIEW выборки идут постоянно? -
Имеете в виду постоянно ли обращение идёт к ней? Не то чтобы, дашборд обращается в качестве витрины данных.
Сама эта вьюха обращается к юниону из четырех матвьюх -
Самое большое - несколько тысяч айди, обычно меньше
-
SELECT * FROM system.zookeeper WHERE path='/clickhouse/task_queue/ddl/query-0000001192/` FORMAT Vertical
тут что говорит? -
чота не могу понять как проверить состояние clickhouse keeper
-
служебных таблиц чота тоже не вижу от keeper
-
system.zookeeper ? не?
я просто его еще тоже не трогал еще -
не zookeeper, а clickhouse keeper
-
и он не создает служебную таблицу zookeeper
-
погоди, clickhouse-keeper это пока что просто заменитель zookeeper на nuraft
серверу все равно секция <zookeeper> в конфиге clickhouse-server вроде нужна? или нет? -
=( блин полностью преза вылетела из головы, на последнем митапе в альтинити была преза от clickhouse.inc
-
ну без него запустился и в логи пишет: https://i.tk-chel.ru/denisio/202109/26_231840.png
-
да серверу нужна секция zookeeper.
да таблица system.zookeeper будет с кипером -
А
-
Joined.
- 27 September 2021 (120 messages)
-
Еще раз приветствую. На всякий случай попробую апнуть вопрос.
-
Всем привет!
Пытаюсь создать словарь с типом хранения complex_key_ssd_cache использующий в качестве источника локальную таблицу MergeTree.
Запросы с одним ключом отрабатывают нормально:
select dictHas('test_dict', 'test_key');
Но запросы со словарем и таблицей падают с ошибкой недоступности источника:
select count()
from test_schema.test_table
where dictHas('test_dict', key_string);
Проблема была решена увеличением query_wait_timeout_milliseconds. Теперь падает с ошибкой AST is too big. Maximum: 500000:. Увеличение параметров max_ast_elements и max_expanded_ast_elements на уровне запроса и на уровне сессии проблему не решило - падает с той же ошибкой. При этом в таблице system.dictionary отображается что словарь аллоцировал память, но в директории хранения словаря по параметру path пусто и размер папки 4кб. В логах запроса send_logs_level = 'trace' и journalctl ничего критичного. В чем может быть проблема? При этом с complex_key_hashed все работает отлично, быстро обновляется и запросы отрабатывают без проблем. -
Коллеги, добрый день. Подскажите можно ли собрать кластер клика из узлов одинаковой версии но на разных осях (CentOS и Ubuntu)?
-
Можно, но могут быть некоторые особенности
-
реплика на таких узлах соберется?
-
Да в целом должна, но может быть несколько разная производительность
-
И ядро должно быть свежее
-
Понятно. Мне это надо чтобы без остановки на убунту переехать.
-
В ClickHouse появилась опция спрятать код в функцию. 2 вопроса:
1) Как увидеть список созданных текущих функций?
2) Очень желательно: как настроить их просмотр в DBeaver? А то есть только папка под "процедуры", которая пустая... -
@den_crane Добрый день! Вы не сталкивались с такой проблемой?
https://t.me/clickhouse_ru/236143ازت in ClickHouse не тормозитКоллеги, добрый вечер! Столкнулся со следующей проблемой, может кто знает и сможет помочь: Попытка обновить вьюху привела к тому, что кликхаус выдал ошибку таймаута JDBC-драйвера . После чего таймауты были увеличены, но теперь другую ошибку выдает: Code: 159, e.displayText() = DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000001192 is executing longer than distributed_ddl_task_timeout (=180) seconds. There are 1 unfinished hosts (0 of them are currently active), they are going to execute the query in background (version 21.1.2.15 (official build))
-
-
UDF появились в версии 21.10 и наверное ещё не продакшн ready. Не думаю что ваша версия КХ поддерживает их
-
Как раз себе на днях 21.10 установил в докер, так что поддерживает)
-
А вы отважны) я бы попробовал в system.functions поискать, сам пока не ставил)
-
Всем привет! Подскажите пожалуйста функцию в clickhouse, которая выводит текущее время, видимо я слепой, не могу найти её в документации
-
Так давно ждали возможность спрятать хотя бы частично монструозный SQL-синтаксис в функции, что только завидев уже начали учить)
Но судя по всему, бобер помимо нежелания показывать список функций, еще и не любит показывать массив в массиве на DateTime64(
Видимо придется ждать-с -
now(),now64()
-
Спасибо!
-
Добрый день. Подскажите, какие есть опции по бекапам? Из хотелок - с кластера на несколько нод выгружать данные в гугловский сторадж. Хочется также уметь делать это, например, из куба, чтобы не держать сервер под это / не грузить ноды КХ.
Пока ничего кроме clickhouse-backup не нашёл, вроде не совсем то, что хочется. Насколько я понял, он работает иначе, он не выгружает сами данные. Отсюда три вопроса:
1. Он адекватно работает с кластером, в котором несколько шардов?
2. Его нужно ставить на каждую ноду КХ и отдельно на каждой прогонять бекапы?
3. Какие альтернативы? -
1. Ему без разницы кластер там или нет
2. Да, бекапы можно делать одной реплики шарда
3. Freeze partition и загрузка его куда-нибудь руками, insert into s3() select ... -
а подскажите пожалуйста, эта ошибка вообще насколько критична? просто я понял что у меня она сыпется чуть ли не через каждый запрос, в логах КХ. При этом данные вставляются иногда нормально, а иногда нет
-
добрый день, подскажите плиз, почему если использовать clickhouse-client через баш и выполнять команды через --query="" то например при переливе данных INSERT INTO t SELECT * FROM t2 возникают ошибки наподобие "Too many partitions for single INSERT block". при этом если выполнять те же команды непосредственно из clickhouse-client подключаясь с того же хоста и тд, всё переливается отлично без каких-либо ошибок ? как можно запускать это из баша, поскольку не всегда это удобно запускать руками.
-
Этот? :)
Мега-доклад, простым языком Алексей рассказал про HyperLogLog и Counting Bloom Filter, например.
https://youtu.be/sJe35GLxzlsКак перестать бояться и начать разрабатывать специализированные структуры данных – Алексей МиловидовАлексей Миловидов (Yandex) «Как перестать бояться и начать разрабатывать специализированные структуры данных» Конференция X5 Retail Hero https://retailhero.ai/conference Презентации - https://drive.google.com/drive/folders/1zf8rSVU9bHXTkPDAms5bkV9qDdxVpbdN?usp=sharing
-
Да, спасибо, оно
-
Подскажите, пожалуйста, а не планируются ли митапы по ClickHouse в Москве (России) этой осенью? В прошлом году раз в квартал проводили, в этом последний раз был в марте ещё.
-
Привет!
Подскажите пожалуйста, перевожу таблицу на репликацию Rep...MergeTree, копирую данные в папку detach и почему когда подключаю PARTы вот таким способом
ALTER TABLE visits ATTACH PART
То для некоторых парт данные отличаются . Проверяю простым
SELECT count()
разное количество выходит -
Привет! подскажите пожалуйста как лучше перекинуть схему с не репликейтед таблицами на другой сервер?
Схаема с типом Atomic, так-то хотел просто через rsync нужные папочки перекинуть, а тут с атомик, как-то все смешано ((( -
clickhouse-copier смотрели?
-
-
-
нет, спасибо посмотрю
-
Или через show create название таблицы
-
-
я и хотел ручками, с Ordinal было бы всё просто, а с Atomic чота не дагоняю как там понять что к чему относиться
-
Есть ли у КХ кэш запросов? Делаю бенчмарк, хочу его отключить если можно.
-
по-умолчанию нет
-
Какой настройкой это контролируется?
-
use_uncompressed_cache, но это не совсем про кеш результатов
-
есть замечательная программа clickhouse-benchmark
-
а так вот это может быть полезным https://clickhouse.com/docs/en/sql-reference/statements/system/#query_language-system-drop-mark-cacheSYSTEM | ClickHouse Documentation
SYSTEM Statements The list of available SYSTEM statements: RELOAD EMBEDDED DICTIONARIES RELOAD DICTIONARIES RELOAD DICTI
-
У меня это включено, т.к. будет включено на продакшн системе.
-
можно делать SYSTEM DROP UNCOMPRESSED CACHE перед запросом
-
Он показывает неправильный результат по QPS, если нода начинает тротлить соединения (стоит к примеру max_concurrent_queries). Начинал с нее, но когда начал заоблачный qps показыватать (соединение не может быть установлено), пришлось перестать.
-
Спасибо за информацию!
-
Но по факту именно кэша запросов в КХ нету, т.е. Query Plan не живет дольше запроса?
-
Потому что uncompressed cache - это по сути, то, что я хочу тестить, чтобы он выгрузил в память побольше.
-
Добрый день,
различия в эскейпах - это баг или фича?
:) create table t42("a \\ " UInt32) engine = MergeTree() order by "a \\ ";
:) select name from system.columns where table = 't42';
┌─name─┐
│ a \ │
:) select sorting_key, primary_key from system.tables where name = 't42';
┌─sorting_key─┬─primary_key─┐
│ a \\ │ a \\ │
Неожиданно, что одна и та же колонка в разных системых таблицах именуется по-разному. -
Привет всем. Подскажите пожалуйста, а шардинг работает только с Mergettree или с любым движком ?
-
Joined.
-
Всем привет)) Сегодня ознакамливаюсь СУБД ClickHouse, до этого был знаком лишь с MySQL, Postgresql и различные NoSQL, я так полагая парадигмы мышления тут другая и механизм работы имеет разнцые концепции.
В каких ситуациях профитно использовать ClickHouse? -
Обзор | Документация ClickHouse
Что такое ClickHouse ClickHouse - столбцовая система управления базами данных (СУБД) для онлайн обработки аналитических
-
Когда данных много и надо делать аналитику. При этом учитывая, что в кликхаусе нельзя обновить данные как в обычной реляционной бд
-
Обзор | Документация ClickHouse
Что такое ClickHouse ClickHouse - столбцовая система управления базами данных (СУБД) для онлайн обработки аналитических
-
WTF ? она занимается рассчетами и выплевывет результат?
-
у нас бывает что пока не сделаешь detach distiributed таблицы она будует в логах постоянно сыпать, лучше разобраться)
-
Всём привет, можно ли публиковать вакансии? Я не hr, ищу коллегу в команду
-
тут даже hr'ы пишут - чего стесняться? Главное чтобы clickhouse был в первых позициях вакансии, а не 3-м после остальных баз и языков.
-
Вместо dictGet можно делать обычный join с таблицей равной имени словаря. Как я понимаю это сделано для удобства работы с разными BI, которые умеют только стандартный SQL. Это работает и это здорово.
Но как передать второй аргумент в словарях с хранением range_hashed?
Получаю Wrong argument count for function dictHas when dictionary has key type range: While executing JoiningTransform. (NUMBER_OF_ARGUMENTS_DOESNT_MATCH) - что логично.
по какому имени можно сделать условие в join для дополнительного аргумента? -
Ответ скорее всего утвердительный, волноваться стоит.
Но вы не указали источник данных для словаря и его layout. Например, cуществует cache. -
всем привет.
скажите, есть ли вариант сделать join на большой таблице, с очень малым количеством озу?
время выполнения не принципиально, хоть неделю
при
SET join_algorithm = 'partial_merge'
select * from c.main inner join c.d on c.main.m = c.d.a
выдаёт
Code: 241. DB::Exception: Received from . DB::Exception: Memory limit (total) exceeded: would use 2.79 GiB (attempt to allocate chunk of 4325664 bytes), maximum: 2.79 GiB: (avg_value_size_hint = 43, avg_chars_size = 42, limit = 16384): (while reading column address): (while reading from part /chdb/store/4f8
/4f88080f-c32b-4ced-8f88-080fc32beced/all_320499_332314_44/ from mark 576 with max_rows_to_read = 16384): While executing MergeTreeThread. (MEMORY_LIMIT_EXCEEDED) -
Select и вперёд)
-
ну за неделю можно поднять постгрес и на нем спокойно сделать джойн)
-
сколько у вас всего памяти на сервере?
-
ну вообще могу залить на сервер с 96 гб и там прогнать, но т.к. это надо делать примерно раз в несколько месяцев, а хранить на том сервере не вариант, то подумал вдруг можно это сделать на этих мощностях, но медленней
-
так может тогда вообще с кликхауса на него перейти)
-
отличная идея!
-
так сколько памяти у вас на текущей конфигурации?
-
4-6 гб
-
а какие размеры таблиц?
-
set join_algorithm=partial_merge
select * from system.settings where name like '%join%'; -
1169182464 строк
на винте примерно 40гб занимает -
set join_algorithm=partial_merge
select * from system.settings where name like '%join%'; -
set join_algorithm='partial_merge'
-
┌─name───────────────────────────────────────┬─value─────────┬─changed─┬─min──┬─max──┬─readonly─┬─type───────────┐
│ max_joined_block_size_rows │ 65505 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ join_use_nulls │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ join_default_strictness │ ALL │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ JoinStrictness │
│ any_join_distinct_right_table_keys │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ joined_subquery_requires_alias │ 1 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ prefer_global_in_and_join │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ max_rows_in_join │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ max_bytes_in_join │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ join_overflow_mode │ throw │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ OverflowMode │
│ join_any_take_last_row │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ join_algorithm │ partial_merge │ 1 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ JoinAlgorithm │
│ partial_merge_join_optimizations │ 1 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ default_max_bytes_in_join │ 1000000000 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ partial_merge_join_left_table_buffer_bytes │ 32000000 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ partial_merge_join_rows_in_right_blocks │ 65536 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ join_on_disk_max_files_to_merge │ 64 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ enable_unaligned_array_join │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
│ multiple_joins_rewriter_version │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
│ cross_to_inner_join_rewrite │ 1 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │
└────────────────────────────────────────────┴───────────────┴─────────┴──────┴──────┴──────────┴────────────────┘ -
-
-
Limit for rows (controlled by 'max_rows_to_read' setting) exceeded, max rows: 100.00 thou
sand, current rows: 387.41 million. (TOO_MANY_ROWS) -
понимаю, жизнь такая(
-
-
можно битмапы - но там наоборот жрут память чтобы ускорится. Вам как раз надо настроить merge join, чтобы делать все на диске.
Мне кажутся перспективными сеттинги:
partial_merge_join_left_table_buffer_bytes │ 32000000
partial_merge_join_rows_in_right_blocks │ 65536
пробуйте. потом расскажете нам можно ли на 3-х гигах решить такую задачку -
опасные слова. Вы в джойне все колонки разом сравниваете? Так себе идея для колоночной базы данных.
Можно попробовать в два приема сделать - сначала найти совпадения по первичному ключу - их будет уже не ярд, а сильно меньше, и только потом разбираться с остальными колонками. -
Коллеги, всем привет)
я уже задавал вопрос по своей проблеме, но возможно не так его сформлировал
Пишу файл в Distributed таблицу, под которой лежат ReplicatedMergeTree
Пишу с использованием официального clickhouse-jdbc
Пробовал много вариаций кода, но в конечном итоге драйвер отправляет примерно один и тот же HTTP запрос в кликхауз
Проблема в том, что при вставке данных (~1млн строк, 2 колонки, около 20 мб) иногда вставляется полное число строк, а иногда нет. причем числа ошибочных вставок очень похожи)
нормальная вставка - 1188006
битая вставка - 792047,791708,792494
в логах клика вижу ошибку, но как при успешной вставке, так и нет, поэтому не могу утверждать важно это или нет. на всякий случай, 1 файл - 1 ключ партицирования таблицы, т.е партиция должна быть одна
Too many partitions for single INSERT block (more than 100)
В чем может крыться причина обрыва? может ли это быть из-за того что в момент записи кто-то другой пытается читать из этой таблицы или партиции? -
> Too many partitions for single INSERT block (more than 100)
покажите свой partition by. Он точно по месяцам? Почему нет? -
PARTITION BY segment_id
вот такой, поле segment_id я задаю каждый раз при записи файла
в файле одна колонка это значение, а вторая - ключ партицирования, в каждом новом файле он один на все строки -
а эта ошибка только во время инстерта? как я писал она может сама постоянно в логи писать, даже без инсертов, если до этого не так 1 раз вставили
-
-
да такое ощущение что только во время, она же там sql выдает. в котором видно мою таблицу. правда не понятно на какую именно партицию он ругается
-
а вы предлагаете его уменьшить? или наоборот?
у меня по умолчанию стоит, 1048576 -
-
-
ну тут не всегда больше миллиона. иногда это маленькие партиции
просто на больших файлах стали замечать что время от времени данные пропадают где-то -
-
да, как минимум segment_id будет разным. ну и вероятность одинаковых значений во второй колонке крайне мала
-
нет, я сравниваю одну колонку с одной колонкой разных таблиц
-
DB::Exception: Memory limit (total) exceeded: would use 2.80 GiB (attempt to allocate chunk of 4981824 b
ytes), maximum: 2.79 GiB: While executing FillingRightJoinSide. (MEMORY_LIMIT_EXCEEDED) -
Что-то там наговорил: https://www.youtube.com/watch?v=PqxYBYn2R9wАлексей Миловидов (ClickHouse) - первое интервью после $50mln-сделки на Russia Open Source MeetUp
В рамках инициативы Russia Open Source 22 сентября 2021 года состоялся митап на тему монетизации решений с открытым кодом. Алексей Миловидов — основатель ClickHouse - системы управления базами данных с открытым кодом, созданной для решения конкретных задач Яндекса и перешедшей в самостоятельный продукт с мировыми клиентами. Рассказал о том, как рождаются OSS-стартапы в рамках корпорации и могут ли они самостоятельно зарабатывать на Open Source, а главное — как? Первое интервью после $50 mln-сделки в компанию ClickHouse Митап прошел в формате живой встречи с дополнительной online-трансляцией. Детали на сайте https://russiaos.ru/meetup/ #RussiaOpenSource #Open Source #OSS #АлексейМиловидов #ClickHouse #Яндекс #РФРИТ #открытыйкод
-
-
может быть что-то такое, но не уверен
SELECT column2, sum(any(column1)) FROM table GROUP BY column2 -
-
что-то не понял как без group by, в вашем примере принятый ответ его использует
-
select col1, arraySum(groupArrayDistinct(col2)) from table group by col1
-
посмотрите второй ответ в stackoverflow треде, через кастомный агрегат. там же есть пример SQLFiddle
он принимает колонку, по которой группировать на вход, что избавляет от потребности указывать ее в group by -
попробуйте через group by
select a from (select a from t1 union all select a from t2) group by a having count() = 2
если и тут памяти не хватит, попробуйте set max_memory_usage_beefore_external_group_by = 1gb -
#вакансия #Clickhouse #dba #удалёнка
Вакансия: DBA ClickHouse (должность звучик как Старший консультант)
Компания: X5 Group (X5 retail group, X5 Технологии)
Локация: удалёнка, но если хотите можно ездить в офис 3 штуки на выбор в Москве
Зарплата: 120000 - 200000 на руки
Я руководитель команды NoSQL СУБД (тимлид).
Наш отдел занимается всеми промышленными централизованными СУБД.
Что делать?
- Администрировать СУБД ClickHouse как single так и в cluster в качестве 3 линии поддержки
- Автоматизировать задачи по СУБД средствами Ansible для себя и коллег со 2 линнии поддержки
- Развивать мониторинг СУБД на базе Zabbix
- Решение инцидентов, запросов пользователей в части БД как 3 линия поддержки
- Подготовка, настройка, обновление СУБД
Идеальный кандидат имеет:
- Знание СУБД ClickHouse в части DBA
- Backup/recovery/DRP для СУБД ClickHouse;
- Уверенные знания SQL
- Знания Shell, bash, python, ansible (скриптовые языки для автоматизации)
- Знания Linux, на уровне администратора, необходимые для поддержки СУБД ClickHouse
- Навыки работы с Git
Любые вопросы по вакансии в ЛС @DonAlexey
Более подробно про компания и сама вакансия
https://hh.ru/vacancy/47093185 -
#вакансия #удаленка
Вакансия: DBA ClickHouse
Компания: РА Selecty
Город: Москва
Формат работы: remote
Занятость: full time
Компенсация: 150000 - 200000 net., без учета премий
Всем привет! Мы находится в поисках Старшего Администратора СУБД ClickHouse в одну из крупнейших ритейл компаний РФ.
🔸Задачи:
- Администрирование СУБД ClickHouse (single instance, Cluster);
- Автоматизация задач по сопровождению СУБД по средствам Ansible;
- Мониторинг СУБД на базе Zabbix;
- Решение инцидентов, запросов пользователей в части БД как 3 линия поддержки;
🔸Пожелания к кандидату:
- Знание СУБД ClickHouse в части DBA;
- Навыки проведения Backup/Recovery для СУБД ClickHouse;
- Уверенные знания SQL;
- Знания Shell, python, ansible - как преимущество;
- Знания Linux, на уровне администратора, необходимые для поддержки СУБД ClickHouse;
- Навыки работы с Git - будут плюсом.
🔸Условия:
- Гибридный график работы (офис/дом);
- ДМС со стоматологией;
- Оформление по ТК РФ.
🔸Если заинтересует, я здесь 24/7 @papabooo
или на почту andrey.boyko@selecty.ru -
Старший + X5 retail = 120тыс? что то не сходится
-
точно ищете старшего?
-
От120 до запросов, может нужен няш-маш стесняш из региона
-
если тут уже начались городушки с group by, то в КХ точно надо задействовать limit 1 by:
select sum(c1) from (select c1 from table limit 1 by c2) -
> (темлид).
кто? -
Кликхаус такой простой, что справится даже джун)
-
Коллеги, я написал от, политика конторы не позволяет вовсе публиковать никакие суммы
-
Пишите резюме, приходите поговорить, называйте цену и будет вам золото😇
-
отредактировал описание на реальность
-
ошибся, поправил
-
описание отредактировано
-
отредактировано
-
Пишите, кто заинтересуется, вакансия ниже моего поста та же
-
Вы точно сделали низкую вилку для senior DBRE кликхауса
-
- 28 September 2021 (261 messages)
-
Спасибо за обратную связь, можете подсказать какой должна быть правильная вилка?
-
Всем привет , подскажите плз, можете кто знает как ускорить мерж партиций при мутациях в таблицах с использованием ReplicatedMergeTree???
На данный момент сервер 64cpu/128ram уже дней 10 мержит 200 строк изменений в таблице на 200 млн строк. -
Ну давайте так. Вы должны были как тимлид обсудить с вышестоящими над вами сколько они могут и будут выделять на позицию, открытую в вашей команде.
Сейчас вы тут немного налажали, откровенно говоря, показывая, что тимлид из вас никудышный, если хотите быть лучше, идите в такие чатики как "Современная разработка ПО" или можете задавать вопросы в teamlead bootcamp или боль тимлида.
И за сим оффтоп прекращаю. -
В больших компаниях тимлида не подпустят к цифрам по зп даже близко. Скорее всего сумма взята с потолка.
-
Спасибо на этом. Я как тимлид смог повысить эту ставку до этой вилки что написано, более вышестоящие не готовы выделять к сожалению.
-
Ну, могу с большей вероятностью сказать, что да. :)
Несмотря на то, что столько выделило начальство -
Все верно, изначально её взяли с некоторого потолка, потом её скорректировали на ту что написана.
-
А так конечно очень конструктивно ходить вокруг да около не называя конкретных чисел, никто не сказал "нормальную вилку"
-
таких зарплат которые вы пишите на рынке попросту нет, начинается всё с 400к
-
А почему кто-то должен говорить нормальную? Как бы вы должны ее были определить, учитывая, кто вам нужен и какая в среднем вилка или по статистике, а уж HR должен был подправить с учетом рыночной оценки.
-
а что таког ов этомм чатике? деды тип сидят
-
Вы вначале б послушали и материалы почитали бы прежде чем такое говорить)
-
В крупных конторах часто HR не знают рынков особенно по редким технологиям, я же не просто так сам пошел по чатам искать. Найти никого не могут, а работать как говориться надо
-
эм... ?
-
Спасибо что хоть кто-то ответил.
-
идите в такие чатики как "Современная разработка ПО" - ну я уточнил что в этом чатике такого особенного
-
Ну туда идти стоит. Соррян, что попуталось
-
-
Добрый день, может кто-то пояснить момент с partition и order by. Например у меня таблица с partition by toYYYYMMDD(t1) order by (a1, a2). Если я напишу запрос where t1 > 'x' and a1 = z and a2 = y. То логика работы будет какая? Сначала отработает по партиции, найдет нужный кусок данных, а потом по этому куску данных по order by найдет нужные мне данные?
-
Спасибо, подписался, наблюдаю.
Еще пару вопросов в рамках этой темы миграции на шардированный кластер:
- Как правильно делать миграции ALTER/DROP, очень редко CREATE на шардированном кластере из кода?
- Нельзя ли перелить данные не через инсерты? Например переливкой партиций? Я сейчас проверяю на тестовом кластере, и все это очень медленно. -
> Как правильно делать миграции ALTER/DROP, очень редко CREATE на шардированном кластере из кода?
ALTER TABLE ... ON CLUSTER
на одной из нод запускайте
и тулу для мигрирования
https://kb.altinity.com/altinity-kb-setup-and-maintenance/schema-migration-tools/golang-migrate/ -
> - Нельзя ли перелить данные не через инсерты? Например переливкой партиций? Я сейчас проверяю на тестовом кластере, и все это очень медленно.
медленно это сколько в кол-ве строк в секунду? -
Около 6к, но там давольно слабое железо...
-
6k это очень мало
а что там происходит? как именно вы данные то вставляете?
INSERT INTO ... SELECT
должен быть достаточно быстрым -
-
-
-
-
Конкретно сюда наливаю просто из tsv, но да, я перечитал, это чутка другой кейс...
-
Добрый день. В доке не нашел, хотелось бы поподробнее понять механизм работы оптимизатора КХ. Например если я сделал представление и в запросе к нему передаю дополнительные условия для фильтрации - то оптимизатор перемещает эти условия внутрь подзапроса из которого состоит представление? Бенчмарк показывает примерно одинаковый результат, но хотелось бы теорию понять.Судя по тому что пишет EXPLAIN все таки выполняется подзапрос полностью, а потом применяются к результату фильтры. В основном работал до этого с PG, и в доках очень подробно описаны такие моменты. Кто может подсказать?
-
Добрый день.
Как получить в селекте структуру типа [{key1:field1, key2:field2}, ...]?
SELECT groupArray(map('id', _id, 'name', name))
FROM categories
получаю
There is no supertype for types UInt64, String because some of them are String/FixedString and some of them are not: While processing map('id', _id, 'name', name). (NO_COMMON_TYPE) -
Приведите к String аргументы, пишет же
-
А почему я не могу использовать интовое значение?
-
Так у вас ошибка не про Int
-
В таком случае я не очень понимаю, в чем. Поясните, пожалуйста
-
В том, что я в качестве значений мапу подсовываю разные типы данных?
-
because some of them are String/FixedString and some of them are not - полагаю дело в том что часть значений в map это строка, а часть нет
-
похоже что у вас _id Uint64, а name String - такое в один мап не влезает. Тут вам не JS, тут всё жестко типизировано, как в C++
-
Вопрос как раз в том, ошибка у меня в построении запроса, или все-таки это фундаментальное ограничение ch
-
Всем спасибо за ответы, буду кастовать к строке
-
фундаментальное похоже - Map(key, value)
Тип данных Map(key, value) хранит пары ключ:значение.
Параметры
key — ключ. String, Integer, LowCardinality или FixedString.
value — значение. String, Integer, Array, LowCardinality или FixedString. -
одинаковые типы в значении должны быть, или все инты или все стринги
-
Спасибо. Это было не слишком интуитивно, потому что я предполагал, что мапу можно предписать структуру из нескольких ключей, за каждым из которых закрепится его тип данных
-
добрый день
подскажите плз
вот есть argMax .... отличная функция 🙂
у меня в базе есть 2 строки с одиаковым временем до секунды .... разница на самом деле в микросекундах .... когда я сортирую у меня последним выдается нужная мне строка ... но argMax выдает первую строку .... что можо с этим сделать ? -
Вы эти микросекунды в базе то храните?
-
В колонке
-
DateTime вроде как не умеет
-
по крайенй мере я не видел таких возможностей
-
Ну так используйте datetime64
-
хмммм
-
А если перевести датувремя в число? И применить функцию к числовому полю
-
числовое то поле тоже будет одинаковое
-
просто я думал вдруг можно еще этой функции сказать как-то что можно использовать натуральную сортировку как в монге
-
-
а куда "сюда"?
INSERT INTO ... FORMAT TSV
тоже должен работать не 6 тыс строк в секунду а как минимум 100 000 строк в секунду
сколько у вас колонок?
в какую таблицу наливаете?
как меряете скорость вставки? -
что значит "не приаттачивается mv"?
при вставке новых данных в таблицу перестают данные в MV появляться? -
Всем привет! Кто-нибудь перетягивал данные в clickhouse через kafka, как эффективно это работает в связке?
-
эта вью просто не появляется
-
да, отлично работает
-
Cюда - себе на тестовый кластер - играюсь с шардированием/репликацией подливая данные за месяц с одного из прода.
Заливаю вот так:
zcat db_table_data.tsv.gz | clickhouse-client -d db --query='insert into db.table format TabSeparated'
Колонок около 100:
# clickhouse-client -q "describe db.table" | wc -l
94
Наливаю прямо в distrubuted, оно разливается по трем шардам, ключ шардирования halfMD5(user_id)
Скорость считал очень просто - переодически запуская count(*). -
как VIEW создавался?
с использованием TO db.table
или без?
ATTACH TABLE делаете ? или ATTACH MATERIALIZED VIEW? -
вью создавался с to db.table и аттачим как ATTACH TABLE
-
-
Я не работал с кафкой, есть ли возможность настраивать источники, мне например нужно забирать данные из разных источников, например:
google sheets
mysql
postgresql
s3
И т.д...
всего порядка 50 - 60 источников -
Вы же хотите из kafka забирать данные в clickhouse. А уже как вы из этих источников будете лить в кафку - это другой отдельный вопрос.
-
Понял, просто думал, мало ли там есть подобный функционал, но видимо это другое)
-
Добрый день. Используем replacingMergeTree для апдейтов. В итоге нужно чтобы оставалась только одна последняя запись. В фоне merge пропускает очень много данных. Помогает только optimize table final. Подскажите, пожалуйста, можно ли эту проблему другим путем решить, нежели переодически запускать optimize table?
-
Всем привет! #вакансия
Наша команда находится в поиске Clickhouse разработчика (плюс опционально DBA) для создания аналитической платформы для анализа клиентского поведения в мобильном и веб-приложении СберБанк Онлайн. Платформа обеспечивает онлайн обработку данных, построение на лету базовых продуктовых отчетов, мониторинг аномалий, а также детальную BI-аналитику выделенных сегментов. Пользователи – внутренние клиенты Банка (владельцы продуктов, аналитики, UX-исследователи)
Техническая сторона:
• 128 серверов в промышленном кластере
• 6 серверов в тестовом.
• Общий объем данных – более 1 ПБ.
• Нагрузка - свыше 10 млрд новых записей в сутки (в пике 150 тыс записей в секунду)
Обязанности:
• R&D новых решений - разработка новых представлений, таблиц и запросов для новых бизнес-отчетов (воронки, ретеншн, сегментирование)
• Интеграция со смежными системами для обогащения данных
• Оптимизация производительности, обеспечение высокой доступности прикладных сервисов
• Настройка репликации данных
• Аудит и рефакторинг существующих схем
• Текущее администрирование существующего кластера
• Мониторинг работы БД на базе Zabbix и/или Prometheus
Требования:
• Опыт работы с Clickhouse (разработка или администрирование)
• Linux/Unix, опыт работы с высоконагруженными системами, резервирование
• Базовые знания концепций распределенных систем и стеков технологий больших данных - как Hadoop, Spark, Kafka
• Желательно знание хотя бы одного языка программирования (Python, Java)
• Желательно знакомство с системами продуктовой аналитики – GA, Яндекс метрика, Amplitude
Наши условия - стандартное описание плюшек Сбера:
• Совершенно новый, современный IT-офис вблизи Москва-Сити;
• Интересные, сложные, амбициозные задачи;
• Создание продуктов для аудитории в несколько десятков миллионов человек;
• Возможность профильного обучения (обучение и сертификация за счет компании);
• Гибкий график начала рабочего дня;
• Стабильная, конкурентная «белая» заработная плата (оклад + премии);
• Льготные условия по кредитам Сбербанка;
• ДМС, страхование от несчастных случаев, социальные гарантии, корпоративные мероприятия;
• Тренажерный зал.
Если вы заинтересовались, пишите в личку @Nebrus или на почту kaligina.a@sberbank.ru -
аrgMax, final, limit 1 by
-
100 колонок, тут сильно зависит от структуры конечно...
но должно быть не так медленно как вы говорите
zcat | pv -n | clickhouse-client
что показывает? -
то есть вот прямо
ATTACH TABLE db.mv TO db.table AS SELECT ???
что-то не верится... что у вас такое работает -
без AS SELECT - он используется при ATTACH MATERIALIZED VIEW
-
благодарю
-
создание вью
CREATE MATERIALISED VIEW db.mv TO db.table AS SELECT … FROM db.another_table:
аттач
ATTACH TABLE db.mv -
аттач разумеется после детач
-
ну так у вас нет таблицы просто физически
ATTACH MATERIALIZED VIEW
вроде из консоли не работает
так что вам надо
CREATE MATERIALIZED VIEW
просто делать
но вообще все равно непонятно
зачем делать DETACH mv ?
OPTIMIZE не вставляет данные в MV underlying таблицу -
Вопрос состоял в том, синхронны ли операции DETACH и ATTACH и не мешает ли их выполнению (задержка, блокировка) опреация OPTIMIZE
-
ок, если optimize никак не влияет на работу вью над таблицей и вставку данных, тогда большое спасибо за ответ, наверное это то, что мы искали)
-
Всем ку!
Коллеги, кто-нибудь использует в продакшене кубовый оператор для clickhouse https://github.com/Altinity/clickhouse-operator?
Можете что-то сказать за/против?GitHub - Altinity/clickhouse-operator: The ClickHouse Operator creates, configures and manages ClickHouse clusters running on KubernetesThe ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes - GitHub - Altinity/clickhouse-operator: The ClickHouse Operator creates, configures and manages Cl...
-
Мы используем в нашем облаке, наши клиенты и не клиенты тоже используют
-
Принято, спасибо.
Подскажите, планируете ли сделать helm-чарт? -
Про хелм, если и будем то не в ближайшей перспективе думаю.
-
Кто-то поможет?
-
проект открытый,
есть в community вот такой chart
https://github.com/PostHog/charts-clickhouse/
но мы его не используемGitHub - PostHog/charts-clickhouse: Helm chart for deploying PostHog with ClickHouse on your K8s infrastructureHelm chart for deploying PostHog with ClickHouse on your K8s infrastructure - GitHub - PostHog/charts-clickhouse: Helm chart for deploying PostHog with ClickHouse on your K8s infrastructure
-
ну, простой ответ
весовых оптимизаторов в clickhouse нет
есть некоторые AST оптимизации
в частности push down where в каких то случаях
но не много
поэтому в 90% случаев проще считать "как запрос написали так его и будут исполнять"
EXPLAIN SYNTAX
посмотрите -
здесь часто пишут с проблемой что условия не прокидываются внутрь и запросы с view работают медленее
-
спасибо, ознакомлюсь
-
Спасибо большое)
-
И вам спасибо)
-
Подскажите
insert into metrics values (toDateTime(now()),('route_Dacha_Work'),(toUInt64('70000'))
получаю DB::Exception: Cannot parse expression of type UInt64 here: (toUInt64('70000')) -
а сколько полей у вас в metrics? 3 или одно?
-
источник настроить не проблема - insert into table select * from url/mysql/pg/s3
другое дело, что 50 таблиц - уже кучка и вам скорее всего нужно реализовывать полноценный ETL процесс (или ELT) Кафка не совсем подходящий инструмент для этой цели (она может быть только частью). Можете посмотреть в сторону airflow или DBT -
На данный момент использую airbyte, но он ещё сильно молодой, много нужного нет, приходится дописывать.
Просто стало интересно насчет кафки узнать, также читал про её интеграцию с camel -
если он вас устраивает по входам и трансформациям, то направляйте его выход в кафку, а из нее вычитывайте прямо в КХ - https://clickhouse.com/docs/en/engines/table-engines/integrations/kafka/Kafka | ClickHouse Documentation
Kafka This engine works with Apache Kafka. Kafka lets you: Publish or subscribe to data flows. Organize fault-tolerant s
-
А в кафке есть система веб-хуков? Например я лью туда данные, и по завершению джоба, мне нужен ответ, что и куда перешло
-
тут группа не про кафку. в интернете есть миллион статей про нее. самое время найти что-то на каком-нибудь медиуме и прочитать.
-
Хорошо, спасибо за ответы!
-
pro.kafka
Чат для добросовестных господ и дам, посвящённый Apache Kafka. Без флуда, оскорблений, оффтопа и токсичного поведения. Спам? Зови @gamussa или @dmitvitalii Канал по Kafka: @AwesomeKafka_ru Вакансии с Kafka: @kafka_jobs Соседи: @jvmchat, @proKong_ru
-
Спасибо!
-
3
-
тогда у вас какая то чепуха написана в запросе и слишком много скобочек, вы tuple как то умудряетесь вставлять
insert into metrics values ( toDateTime(now() ,'route_Dacha_Work', toUInt64('70000') )
вот так должно сработать -
Спасибо прокали
Скобочки брал из примера
echo 'INSERT INTO t VALUES (1),(2),(3)' | curl 'http://localhost:8123/' --data-binary @- -
Добрый день, сталкивался ли кто нибудь с подобной проблемой при восстановлении бекапа утилитой clickhouse-backup?
Хотел при помощи неё мигрировать clickhouse с одной машины на другую, сделал бекап утилитой, перекинул на новую машину, запускаю восстановление:
clickhouse-backup restore '2021-09-23T08-52-29' --table=a.*
Create table `a`.`ab`
Prepare data for restoring `a`.`ab`
ALTER TABLE `a`.`ab` ATTACH PART '1629099846_440_440_0'
can't attach partitions for table 'a.ab' with code: 233, message: Detached part "1629099846_440_440_0" not found
При этом данные в /var/lib/clickhouse/data/a/ab/detached присутствуют. -
в примере вставляется три строки а не одна
-
system.disks на новом сервере и на старом сервере совпадают?
-
Спасибо, не обратил внимание на CREATE
-
а как именно бекапы перекидывали?
через rsync папки /var/lib/clickhouse/backups ? или как то по другому? -
Подскажите, пожалуйста, почему получаю результат формата String при выполнении функции countIf?
Шаги:
1. Иду в консоль и выполняю команду с запросом к нашему кликхаусу:
"clickhouse-client --host (наш хост) --port 9440 --user stat --database stat --password (пароль от нашего кликхауса) --queries-file tmp.txt --secure"
В файле tmp.txt лежит следующий текст с кверёй:
"SELECT
countIf(event_name=='impression') as impressions,
CAST(countIf(event_name=='impression') AS Int32) AS impressions2
FROM
events
WHERE
toDate(receive_timestamp, 'Europe/Moscow') = toDate(now('Europe/Moscow')) - 1
format JSONEachRow
;"
Получаю результат:
{"impressions":"1123","impressions2":1123}
Видно, что impressions - строка, хотя она посчитана по функции countIf. Почему так? -
потому что так JSON сериализует
https://clickhouse.com/docs/en/operations/settings/settings/#session_settings-output_format_json_quote_64bit_integersSettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
лучше не меняйте это поведение, если у вас на приемнике нет библиотеки которая нормально умеет в int64
-
Да, через rsync backups директории. По поводу конфигураций, на старом и новом сервере они идентичны вплоть до дисков, как для самого clickhouse, так и утилиты. Сервера-близнецы, за исключением имени хоста и айпи
-
О, спасибо! А можешь подсказать, как это в итоге залить на YT со строгой схемой? Задача именно в этом.
Нужно в квере написать формат TabSeparated + при создании таблицы написать " --attributes '{schema = [{name = ...; type = int32}]}'" + при заливке таблицы: "--format "<columns=[...]>schemaful_dsv"
Или ещё что-то нужно? Просто таким способом не получилось залить, получаю ошибку, что получен тип строка, хотя ожидается int32. -
Joined.
-
И на YT нужно, чтобы был правильный тип (int32), а не строка
-
Или это уже не к вам?
-
понятия не имею 😉
-
если дисков несколько то надо со всех дисков папку backups тащить
-
Окей, спасибо
-
Всех приветствую! Подскажите, после обновления КХ с 18.6 до 21.8, обнаружил что в запросе select * from distributed_table final where ... табличка с ReplicatedReplacingMergeTree отдаёт две одинаковые строки. 2 шарда по 2 реплики. Строки по одной в каждом шарде. Появились какие то настройки дедупликации между шардами или что то пошло не так?
-
-
думаю это ваша главная проблема, ключ не rand() у вас в Distributed?
-
-
-
магия) вставка только через Distributed? вручную на шарды не пишете?
-
только через Distributed
-
как обновлялись? Вставка этих строк в момент апгрейда / ребута была?
на самом деле ведь Distributed это не гарантирует, конфиг бы увидеть -- remote_servers.
В зависимости от конфига, например весов, рассчитывается в какой шард вставлять -
Обновлялись apt-get install,нагрузку не снимали. Дупликат появился через 2 недели после апдейта. Веса 1:1
-
ОК.
Т.е. вы хотите сказать, что 21.8 Distributed таблица вставила не в тот шард?
При этом в этот момент remote_servers никак не менялся.
Баг тогда -
-
Привет! Есть ли какая то информация о том, почему разные malware и tracker блокеры помечают clickhouse.com как подозрительный и блокируют доступ к нему? Проверено на нескольких подобных блокерах, использующих доступные базы с «плохими» доменами.
-
Если известно о такой проблеме - ведётся ли работа по разблокировке. Очень неудобно когда постоянно блочит этот домен.
-
вот прямо щас вставляется по 10-30К записей в секунду в Clickhouse в табличку с типом MergeTree, эфпячу select * from system.merges но там всё время пусто, так и должно быть?
-
посмотри system.merge_log
-
ээ нет такой!
-
-
версия 21.9.4.35
-
и такой тоже нет :(
-
есть system.parts но там явно все парты вообще. Я уже вроде все системные пересмотрел
-
Всем, привет!
Появилась необходимость уменьшить TTL у тяжелой таблицы, заодно хотелось посмотреть как отработает удаление старых данных. Вчера сделал alter table on cluster name MODIFY TTL. Самое собой запрос сказал, что превышен timeout. Проверил zk в ddl задачка висит, TTL в таблицах поменялась, мутация появилась. Прошел день смотрю мутация все висит, мерджей дополнительных не вижу, в zk задача так же висит, а место не освободилось, старые данные так же спокойно живут. Так как чистить нужно было срочно, кильнул мутацию(попытался), в итоге перезапустил кластер и тогда только смогу убить данную мутацию, удалил drop данные и оставил не пару дней для проверки TTL. Как теперь запустить принудительно TTL, через optimiz final ? Как можно было сделать alter ttl, чтобы не пришлось плясать с бубном? -
надо включить https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/#server_configuration_parameters-part-logServer Settings | ClickHouse Documentation
Server Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli
-
блин щас не могу :( у меня процесс тут идёт долгоиграющий
-
можешь тогда посмотреть в системном логе
-
в uBlock Origin вроде уже убрали
домен старый с 1999 года, там чего только на нем наверное не было
работа думаю ведется -
можно посмотреть сколько партов в партиции
select database, table, partition, count() cnt from system.parts
where active
group by database, table, partition
order by cnt desc
limit 10 -
там была рекламная сеть 10 лет назад
-
set materialize_ttl_after_modify=0;
ALTER TABLE table modify TTL ttl_date
-- then if you need MATERIALIZE TTL
ALTER table ... MATERIALIZE TTL in partition ...
ALTER table ... MATERIALIZE TTL in partition ... -
Мы планируем провести офлайн митап. Будем рады вам не только как гостям, но и как спикерам мероприятия!
Call for papers ClickHouse meet up открыт! -
None
-
Митап в Москве.
-
👍
-
Блин я уже запустил optimize 😩 На сколько это плохо? А что значит MATERIALIZE TTL ?
-
Пока регистрации ещё нет, выбираем дату и темы.
-
>лин я уже запустил optimize 😩 На сколько это плохо?
ну по всякому бывает, если таблица 2 петабайта, то вас уволят я думаю, ну или закопают.
>А что значит MATERIALIZE TTL
ну это в доку. -
блин, заметил что я слишком крупные парты сделал :(
-
>Митап в Москве.
беда, кончилось онлайн счастье, больше пандемий, мне понравилось -
С соблюдением ковидных ограничений и трансляцией
-
Какой кончилось, чот рано победу отмечать %)
-
ну говорят же, "Митап в Москве."
а год назад был в интернете, а не в М -
12 Tб :). Вот теперь понять сколько это будет работать по времени и нельзя ли это как то остановить
-
и как запустили? optimize table T final ?
-
да
-
соболезную вам и вашей семье.
-
таблица Replicated ?
-
-
Это пугает :(
-
select table, elapsed*(1/progress)-elapsed estimate,elapsed, progress, is_mutation,formatReadableSize(total_size_bytes_compressed) size, formatReadableSize(memory_usage) mem
from system.merges order by progress desc -
Доброго времени суток. Очень странная ситуация, не знаю как ее понимать. Выполняю запрос локально CH в докере, и на сервере. Данные 1 в 1, но на выходе получаю что на сервере половина данных задваивает значение, на локалке такого нет, считает ровно
-
2 реплики на сервере?
покажите select * from system.clusters where cluster not like 'test%' -
Да наверн будут или записи, или гибрид :)
-
-
ОК. Я пошутил. Выступать я точно не собирался, хотя наверное надо бы про uniq + MV + проекции рассказать, а то запарился одно и тоже объяснять.
-
А в kb.altinity не писал?
-
сделал
Вижу 9 записей.
для примера
name1 estimate 1501 elapsed 11601 progress 0.8512345687 is_mutation 0 -
я просил вывод, а не пример, сколько самый большой estimate ?
-
нет
-
хз тогда
-
Выставление max_parallel_replicas в 1 может изменить что-то?
-
вывод не могу скинуть :(. самый большой 16500
-
так у вас 1 сервер, я при чем тут это
-
Может запрос показать? Может я что-то не вижу
-
т.е. 5 часов, ну терпимо видимо, наверное повезло и свободного места не хватило все 12TB final помержить
-
То есть еще приблизительно пять часов будет мерджить? И данная операция вообще не обратима ?
-
>То есть еще приблизительно пять часов будет мерджить
скорее всего, если я правильно поделил 16500/3600
>И данная операция вообще не обратима ?
неофициально обратима, но вам нельзя, сломаете нахрен себе таблицу, ждите -
после установки max_bytes_before_external_group_by = 1 000 000 000. запрос дошёл до 99%, потом лег с
Progress: 1.35 billion rows, 46.48 GB (1.25 million rows/s., 43.04 MB/s.) █████████████████████████████████████████████████████████████████████████████████ 99%
0 rows in set. Elapsed: 1160.696 sec. Processed 1.35 billion rows, 46.48 GB (1.16 million rows/s., 40.05 MB/s.)
Received exception from server (version 21.9.3):
Code: 241. DB::Exception: . DB::Exception: Memory limit (total) exceeded: would use 4.86 GiB (attempt to allocate chunk of 400050176
bytes), maximum: 4.66 GiB. (MEMORY_LIMIT_EXCEEDED) -
-
Возможно, вам нужен uniqExact
-
Его очень больно использовать(
-
Другой вопрос, в документации везде указано об оптимизации запросов на группировки, однако при запросе к таблице в 60гб при том что c1 колонка сортировки используется 20гб памяти с обычным uniq, как это можно еще пооптимизировать?
-
Ну так а uniq не гарантирует точного числа.
-
ну, если я правильно понимаю count(*) тоже не гаранитирует, хочется понять в чем разница при группировке
-
тк по памяти разница в 40 раз
-
Хорошему материалу, как ваша презентация по MV, мы все будем очень рады.
-
Думаю, count гарантирует
Разница между uniq и uniqExact в том, что второй натуральным образом тащит полный сет всевозможных значений.
Тогда как uniq может считать хэши , например -
uniq | Документация ClickHouse
uniq Приближённо вычисляет количество различных значений аргумента. uniq(x[, ...]) Аргументы Функция принимает переменно
-
Спасибо за помощь!
-
я к тому, что count(*) использует гораздо меньше памяти, поэтому вряд ли тащит все
-
каунту не нужно держать в памяти все строки чтобы их посчитать, ему достаточно делать инкремент в потоке. унику - требуется
-
понял, спасибо!
-
-
в общем случае так нельзя
-
With x as (Select) select * from x
-
WITH (SELECT * FROM numbers(10)) AS nmbrs SELECT * FROM nmbrs
Code: 60, e.displayText() = DB::Exception: Table datasets.nmbrs doesn't exist (version 21.8.6.15 (official build)) -
-
-
Наоборот
WITH nmbrs as (SELECT * FROM numbers(10)) SELECT * FROM nmbrs -
Разные виды кте, первый возвращает скаляр, второй возвращает таблицц
-
это какой-то новый синтаксис?
-
Ну с 20.10-11 доступен
-
а оно результат вычисляет 1 раз или будет перечитывать если в несколькиз местах вызвать?
-
если 1 раз, то это прям то, что нужно
-
Если возвращает скаляр, то один раз, если возвращает таблицу то каждый раз пересчитывает
-
-
Для одного раза, можно попытаться упихнуть результат в скаляр из массива таплов.
Но это сработает только для небольших сетов -
Привет всем, а кто-нибудь использует оператор k8s от альтинити в проде? https://github.com/Altinity/clickhouse-operatorGitHub - Altinity/clickhouse-operator: The ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes
The ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes - GitHub - Altinity/clickhouse-operator: The ClickHouse Operator creates, configures and manages Cl...
-
тысячи инсталляций по миру.
И Альтинити клиенты используют и Alitinity Cloud весь на нем -
Привет, подскажите, есть таблица с колонками: дата, идентификатор пользователя. Как ее положить в КХ так, чтобы оптимизировать запросы на подсчет числа уников по дням? Я попробовал сделать таблицу с партицией по дням, ключом (дата, идентификатор), потом надстроил распределенную таблицу с датой в ключе шардирования, вот код: https://pastebin.com/TRX9qjrN
Заполнил случайными 20млн строками, при запросе https://pastebin.com/5R0iQpZS отрабатывает за 0.569 сек, а на отдельном хосте за 0.034 сек. Почему такая разница? Есть ощущение, что КХ не использует знание того, что можно параллельно все рассчитать и делает какую-то лишнюю работу. Если вместо uniqExact посчитать max, то на распределенной таблице отработает за 0.033 сек, на отдельном хосте за 0.014, тут похоже на то, что все оптимально
Во время запросов не чистил кеш, как правильно это делать? Может ли он тут повлиять на скорость в случае max?DROP TABLE IF EXISTS fake_dayuse ON CLUSTER '{cluster}';CREATE TABLE fake_dayu - Pastebin.comPastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
Я совсем не эксперт, но поч у вас нету ORDER BY?
-
вроде бы если primary key указать, то order by не обязательно
-
ну только в случае, если order by по ключу, у которого primary key является префиксом, то можно
-
Да, используем
-
если c2 - строки или другие жирные типы, может помочь uniq(cityHash64(c2)) или settings max_block_size=1024
-
нет, инты
-
uniqExact тянет весь Стейт уников на один хост. Возможно, такая "задержка" из за передачи по сети
-
спасибо! А нет идей как оптимизировать? чтобы не стейт тянулся, а конечный результат уже
-
Шардировать по колонке из юник стейта
-
То есть, в данном случае по device_id? А не по групбайному fielddate
-
Точно uniqExact нужен?
-
Да нет, но при uniq похожий тайминг вроде бы
-
КХ умеет понимать шардирование?
-
Да, там правда нужно включать разные настройки
-
А где можно по-подробнее?)
-
+)
-
optimize_distributed_group_by_sharding_key
И тд
Если оно не умеет конкретно в юник, можно попробовать это обойти используя табличную функцию view -
Спасибо, а можно подробнее про обход через view?
-
ещё смотрите
--distributed_group_by_no_merge If 1, Do not merge aggregation states from different servers for distributed query processing - in case it is for certain that there are different keys on different shards. If 2 - same as 1 but also apply ORDER BY and LIMIT stages -
ага, спасибо! тоже нашел, вот здесь: https://github.com/ClickHouse/ClickHouse/issues/17732, в итоге теперь вместо 0.569 за 0.038 считается!group by with high network traffic · Issue #17732 · ClickHouse/ClickHouse
select brand_id, sum(engagement_new), count(1) from( select doc_id, brand_id, any(engagement_cnt) as engagement_new from metrics.dws_3_view group by doc_id, brand_id ) tmp group by brand_id table e...
-
не, там как раз самый большой пик с начала пандемии
>Starship Captain
с повышением, лол -
Добрый вечер!
Проблема следующая: иногда приходит очень много инсертов и в очереди репликации копятся примерно такие записи:
Not executing log entry queue-0000071148 of type MERGE_PARTS for part 632801e1b685803d8904b35e30441476_1143_1525_261 because source parts size (4.29 MiB) is greater than the current maximum (1.00 MiB).
Таких записей набивается пару тысяч на несколько десятков таблиц
Одновременно с этим уходит оперативная память.
system restart replica не помогает.
system.merges содержит только query_threas_log.
Дальше появляется too many parts
Останавливаем запись, очередь тоже не уходит.
Помогала только перезагрузка.
По истории чата увидел max_bytes_to_merge_at_min_space_in_pool
Если поднимем max_bytes_to_merge_at_min_space_in_pool это будет помогать мерджить?
Дискового пространства свободно много. -
я думаю проблема вообще не в этом.
select version();
SELECT
name,
value
FROM system.settings
WHERE name IN ('background_fetches_pool_size', 'background_schedule_pool_size', 'background_pool_size'); -
background_fetches_pool_size = 8
background_schedule_pool_size=128
background_pool_size=16 -
21.2.9.41
background_pool_size,16
background_fetches_pool_size,8
background_schedule_pool_size,16 -
увеличивайте background_schedule_pool_size до 128 или 256
-
у вас шедулер мержей не может назначить мержи потому что там странный алгоритм
-
поэтому сейчас по дефолту = 128
-
на этой версии?
-
недавно в одном сетапе коллеги ставили клиенту 1024, правда потом уменьшили
-
на всех версиях выше 20.12 или как то так
-
а есть где описание, что не так работает, или это данность?
можете описать или ткните ссылкой, где почитать бы -
нигде
https://github.com/ClickHouse/ClickHouse/pull/25072/filesIncrease background schedule pool default size by alesapin · Pull Request #25072 · 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...
-
ок, подниму, завтра на нагрузке посмотрим как будет справляться.
а смысла увеличивать max_bytes_to_merge_at_min_space_in_pool нет? -
смысла нет, у вас место на диске есть свободное?
-
да, много
-
не надо трогать тогда max_bytes_to_merge_at_min_space_in_pool
-
ок, спс
background_schedule_pool_size поднял до 128 -
рестарт нужен
-
а она уже changed
или все равно нужно? -
да, и еще, это сделать на всех репликах? У нас 4 реплики, в одну пишем.
-
рестарт нужен обязательно.
128 надо на всех репликах -
благодарю
-
не рестартовал еще
постоянно сейчас в логи сыпется
Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 32, e.displayText() = I/O error: Broken pipe, Stack trace
Code: 24, e.displayText() = DB::Exception: Cannot write to ostream at offset 206, Stack trace
Есть какие-то причины для этого? -
скорее всего это просто клиент отваливает не дождавшись результата селекта или инсерта
- 29 September 2021 (243 messages)
-
https://clickhouse.com/docs/ru/operations/settings/settings/#enable-optimize-predicate-expression, Нашел что прокидываются. Да и план в итоге показал что прокидывает оптимизатор условия в подзапрос.Настройки | Документация ClickHouse
Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
Коллеги, доброе утро! после обновления КХ, похоже побился secondary index:
ClickHouse exception, message: std::exception. Code: 1001, type: std::__1::__fs::filesystem::filesystem_error, e.what() = filesystem error: in file_size: No such file or directory [/var/lib/clickhouse/store/76e/76eb3696-9266-40e8-9e44-c44721b15a08/20050316_0_0_0/skp_idx_ev_code_idx.mrk
Не подскажите, что с этим делать? -
первое что просится (самое очевидное) - удалить и создать заново. Вас что-то останавливает в этом пути?
-
Индекс не удаляется
-
-
Всем привет, подскажите плс. Если не указывать ON cluster ...cluster в данном случае запрос будет применим автоматически ко всем кластерам?
-
нет. запрос будет отработан только на этом сервере. Если указать какой-то кластер, то этот же запрос отправится на все узлы данного кластера и выполнится там тоже. Это просто такой прокси.
-
подскажите, как такое сделать в запросе кликхауса - groupby('following_id').agg({'text': ', '.join}).reset_index()
-
following_id и text - поля в БД
-
всем привет
подскажите плз, делалось много инсертов пачками, на кадый инсерт получили ответ 200 .... данных не в одной реплике нету .... куда смотреть ? -
select arrayStringConcat(groupArray(text),',') from table group by following_id;
-
всем привет, наткнулись на странное поведение при выборке данных из таблицы
-
есть 2 поля, одно типа Date, второе uint8 в который пишеться час события
-
WHERE (date >= '2021-09-19' and hour >= 17) AND ( date <= '2021-09-26' and hour <= 16)
-
возвращает 0 записей
-
а по факту они там есть
-
Если что тут помог OPTIMIZE <table> FINAL
-
hour >= 17 and hour <=16 какое число подходит?
-
там условия заключены в отдельные скобки
-
Скобки ни чего не значат
-
блин, даже я не допёр, что в этом подвох)
-
в смысле?
-
так там же and
-
ну, то-есть строка в которой дата 2021-09-24, 10 должна попасть под оба условия
-
у вас получается условие hour меньше 16 и больше 17
под такое условие ничего не подойдет -
но час используется совместно с датой
-
WHERE (date = '2021-09-19' and hour >= 17)
or (date > '2021-09-19' and date < '2021-09-26')
or ( date = '2021-09-26' and hour <= 16)
по идее нужно так -
-
ну тогда он срежет всё кроме с 4 до 5 в остальные дни,
а тут похоже немного по-другому подразумевается -
вроде похоже на правду :)
-
странная логика
-
Она не попадает под первое т.к. час меньше 17
-
запустил в консоли запрос и понял почему пустота
-
((date >= '2021-09-19') AND (hour >= 17)) AND ((date <= '2021-09-26') AND (hour <= 16))
-
он выделяет час в отдельные скобки
-
-
да тут когда AND хоть ставь скобки - хоть нет
-
бред бредовый...
-
это же булева алгебра (если я правильно умничаю)
-
Отрицание
-
то-есть комбинированые условия не прокатывают
-
о_О
обычный sql... -
Сколько стадий принятия основных постулатов алгебры кто знает?
-
аххахах
-
дело не в скобках, дело в том, что выражение where применяется к строке целиком. если в выражении есть только and, то скобки можно полностью опускать.
-
депрессия ещё будет точно
-
спасибо
-
Есть кластер из двух серверов, на котором была развёрнута ReplicatedMT таблица. Удаляю её с помощью delete table on cluster - на одном сервере удаляется, а на втором получаю ошибку Table was not dropped because ZooKeeper session has expired. (version 20.8.3.18 (official build)).
Пробую удалить её обычным delete table на втором сервере - та же ошибка.
Пробовал пересоздавать и заново удалять - ничего не помогает.
Соответственно, вопросы:
1. Как её удалить со второго сервера?
2. С чем может быть связана ошибка и как её вылечить? -
-
Ребят, кто знает, как создать новую таблицу на основе запроса? чтобы структура полностью осталась той же, только поставить фильтр на дату
по типу
CREATE TABLE AS (
SELECT * FROM t1 where date>'2021-06-06') -
Это разные операции же
1. Создание таблицы (например create table t like t2...)
2. Переливание данных -
в клиенте таймаут меньше чем выполняется ваш запрос
-
а вместе это называется materialized view populate
-
Таблица | Документация ClickHouse
CREATE TABLE Запрос CREATE TABLE может иметь несколько форм, которые используются в зависимости от контекста и решаемых
-
а если просто данные перелить надо в другую таблицу, зачем view?
-
Как тогда сделать 1 пункт с like?
-
Понял через AS :
create table1 as table2 -
ага, не like, я ошибся
-
Коллеги, достался проект от старых разработчиков. Столкнулись с проблемой, что отвалился шард КХ
-
SELECT *
FROM system.clusters
┌─cluster─────────┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name──┬─host_address─┬─port─┬─is_local─┬─user────┬─default_database─┬─errors_count─┬─estimated_recovery_time─┐
│ new_cluster │ 1 │ 1 │ 1 │ 10.2.81.69 │ 10.2.81.69 │ 9000 │ 1 │ default │ │ 0 │ 0 │
│ new_cluster │ 2 │ 1 │ 1 │ 10.2.81.76 │ 10.2.81.76 │ 9000 │ 0 │ default │ │ 0 │ 0 │
│ new_cluster │ 3 │ 1 │ 1 │ 10.2.81.77 │ 10.2.81.77 │ 9000 │ 0 │ default │ │ 0 │ 0 │
│ new_cluster │ 4 │ 1 │ 1 │ 10.2.81.81 │ 10.2.81.81 │ 9000 │ 0 │ default │ │ 0 │ 0 │
│ new_cluster │ 5 │ 1 │ 1 │ 10.2.81.87 │ 10.2.81.87 │ 9000 │ 0 │ default │ │ 0 │ 0 │
│ new_cluster │ 6 │ 1 │ 1 │ 10.2.81.88 │ 10.2.81.88 │ 9000 │ 0 │ default │ │ 0 │ 0 │
│ new_cluster │ 7 │ 1 │ 1 │ 10.2.81.89 │ 10.2.81.89 │ 9000 │ 0 │ default │ │ 0 │ 0 │ -
подключаюсь к нему через clickhouse-client --host 10.2.81.89, на SELECT 1 не приходит ответ
-
Привет, я получил такую ошибку, нечего не помагало
The local set of parts of table comment_by_user_and_post doesn't look like th
e set of parts in ZooKeeper: 542.00 rows of 542.00 total rows in filesystem are suspicious. There are 300 unexpected parts with 542 rows
После того как я удалил данные реплики из Zookeeper все заработало, но данние в Zookeeper не поивилис -
В какую сторону копать что бы перезагрузить шард/понять что с ним случилось?
-
Привет, друзья!
А как вытащить колонки второго select чтобы в итоговом результате были и они? В итоге нужно получить данные по id, date, name, value
SELECT
id, date
FROM some
WHERE id IN(
SELECT
id, name, value
FROM test
) -
использовать JOIN вместо IN
-
Но нужно сделать выборку по таблице some взяв найденные id из запроса по таблице test
-
INNER JOIN именно так и работает
-
👍🤣
-
Здравствуйте коллеги !
Возникла проблема при переходе с 20 в 21-ую версию.
Clickhouse у меня деплоен внутри кубернетса(kubernetes cluster) с 4 нодами. Есть соответственно 4 шардов clickhouse а .
У всех почти то же самое количество данных в базе данных. Но только один из шардов использует очень много диска и много памяти. не могу найти проблему.
Clickhouse version: 21.7.11.3 -
как определить ключ сортировки в кх?
-
show create table <название таблицы>, там будет ваш order by
-
спасибо!)
-
большое спасибо!
-
Optimize пробежался, но старые данные не почистил. Вашими командами прошел по партициям данные удалились, а вот сами партии не удалились и я вижу их в таблице parts. Причем по ним active 1. Так и должно быть ? Как теперь понять что TTL работает? Если у меня стоит неделя, то я вижу отработку TTL только через неделю по удалению данных которые прилетели после alter table TTL ?
-
Если сделать так, то кх ругается что ожидает в этом месте другие команды, включая IN.
Может как-то по-другому?
SELECT id, dt FROM values('id int8, dt int8', (1,1),(1,2),(1,3))
WHERE id JOIN( SELECT id, nm
FROM values('id int8, nm int8', (1,1),(1,2),(1,3))
)) -
😐 может как-то по другому)
https://clickhouse.com/docs/en/sql-reference/statements/select/join/JOIN | ClickHouse DocumentationJOIN Clause Join produces a new table by combining columns from one or multiple tables by using values common to each. I
-
Я оттуда сюда и пришел😔Позорная дока для крупнейшего поисковика Рунета, в которой многие статьи оценены на кол или троечку, с отсутствием нормальных примеров.
-
Отличная дока, все что нужно есть. Даже много я б сказал.
-
-
Это добавляет пикатности, так что все хорошо.
-
-
вроде как примеры есть
SELECT id, dt, nm FROM values('id Int8, dt Int8', (1,1),(1,2),(1,3)) ANY INNER JOIN (SELECT id, nm FROM values('id Int8, nm Int8', (1,1),(1,2),(1,3))) USING id -
-
Наверно вам не жаль времени на выковыривание банальных примеров по сайтам и чатам.
Там есть страницы оцененные на кол!! другими разработчиками, и компания с миллиардными бюджетами могла бы позволить себе одного писателя доки.
А так да, спасибо царь что хоть что-то есть. -
Дока, видимо, описывает механизмы и особенности КХ, а не основы языка SQL.
Вы пишете
SELECT ... WHERE id JOIN .....
Очевидно не зная этих основ. Так с них и стоит начать. -
Всем привет!
Подскажите, пожалуйста, лучшую практику для следующего случая использования:
В таблице хранятся транзакции эфира, и есть задача получить одну транзакцию по хешу. На данный момент подрисовываю каждой транзакции дополнительный инкрементируемый Id по которому ведется сортировка и храню в сторонней таблице хеш транзакции и этот индекс с сортировкой по хешу. Запрос на транзакцию по хешу в итоге сводится к 2м запросам - получение Id по хешу и получение транзакции по id. Есть мысли вынести таблицу хеш -> id в другую базу, скорее key value, чтобы не грузить CH постоянной сортировкой. -
-
У кх может быть любой собственный измененный синтаксис sql, и именно в доке должны быть банальные примеры. Например такой как мы сейчас обсуждаем.
И если вы приглядитесь, то я всего лишь выполнил то, что выше порекомендовал другой пользователь, так что это вы ему видимо адресуете начать с основ sql.
Хотя он молодец, хоть что-то дельное подсказал. -
Писатели доки есть, и они пишут.
Можете посмотреть по пр в гитхабе -
И да это опен сорс, мы будем рады, если вы поможете нам сделать доку лучше.
-
он вам посоветовал заменить in на join. что вы это восприняли буквально - и есть следствие малого опыта в SQL
-
Ну тогда видимо плохо пишут, раз пользователи на кол и тройки оценивают.
-
зашел по ссылке: вижу описание синтаксиса, вижу "Example" для каждого раздела страницы
-
Оценки без комментариев или issue на гитхабе бессмысленны и бесполезны.
-
Я бы не стал на них обращать внимание
-
Не обращать внимание на пользователей, это так по-российски😭
-
И для практических примеров, есть наша кб кстати
https://kb.altinity.com/ -
Вопрос не про пользователей, вопрос про то, к чему конкретно есть претензия, иначе это просто неконструктивно.
-
Не нашел ни одной страницы с оценкой ниже четырех?
-
Сорри я не готов с вами спорить) мне все нравится
-
zcat | pv -l | clickhouse-client
прыгает от 3к до 8к -
Вопрос как раз в том на кого ориентироваться, оценивая доку.
Тех кто ее пишет или тех кто читает. Очевидно что пользователи часто не довольны. -
Лучшая практика - это использовать хеш в качестве первого ключа в order by, без порождения синтетических ключей и связанных с этим сложностей.
-
> Очевидно
Мне не очевидно, если честно.
У доки есть свои проблемы, но они явно не заключатся в низких оценках. -
> есть задача получить одну транзакцию по хешу.
И только?
А есть запросы вида, дай мне транзакции за этот промежуток времени или за этот блок? -
Низкие оценки и есть следствие этих проблем. Писатели явно много чего не дописали, раз приходится искать информацию по другим сайтам.
-
Писатели работают и пишут доку.
Вы всегда можете им помочь в их нелегком деле, это open source и бесплатный продукт. -
Хеш - это же маскимальная кардиналость, использовать его первым ключом сортировки кажется же не очень хорошей идеей, нет?
-
Очень странный наезд на доку КХ, учитывая динамику развития самого КХ. Ну и причина в вашем случае очевидно не в доке.
"Другой пользователь" посоветовал вам использовать другой механизм, а не заменить одно слово на другое. А если у вас имеется пробел в знаниях синтаксиса SELECT, то дока КХ и тут поможет - в разделе, посвящённом выражению SELECT, указано как пользоваться JOIN-ом.
Ну и непосредственно примеров запросов предостаточно в тестах, которые лежат на гитхабе КХ. -
Нормально, если запросы будут фильтровать только по этому ключу.
-
👍
-
А почему вы не находите странным, что писатели поленились скопировать подходящие примеры из гитхаба, раз уж вы считаете их там предостаточно?
Это же простейшая операция!
Но вас конечно тоже устраивает, что пользователи докой часто не довольны. -
Для случая с эфиром я бы сделал так
INDEX idx timestamp TYPE minmax GRANULARITY 10
ORDER BY (block_id, transaction_hash)
И либо сделал бы второй bloomfilter индекс на transaction_hash либо проекцию с SELECT block_id, transaction_hash ORDER BY transaction_hash и использовал бы ее как вторичный индекс -
INSERT INTO SELECT еще хуже
Progress: 282.17 thousand rows, 8.25 GB (2.07 thousand rows/s., 60.55 MB/s.) -
2021.09.29 14:51:35.185612 [ 23529 ] {} <Debug> db.test_sharded (MergerMutator): Merge sorted 59199 rows, containing 94 columns (94 merged, 0 gathered) in 27.390028777 sec., 2161.333983325738 rows/sec., 57.59 MiB/sec.
2021.09.29 14:51:35.211291 [ 23529 ] {} <Debug> MemoryTracker: Peak memory usage: 326.33 MiB.
Я так понимаю тут сам мердж тормозит. -
а тестовая машина это какие диски?
какой у вас размер записи распакованный примерно получается?
просто 60Mb/s это прямо маловато
даже если 100 колонок... -
какой у вас ORDER BY? сколько у вас там колонок?
-
insert into select settings optimize_on_insert = 0 пробовали?
-
Ну это виртуалка, но на хостмашине типа SSD Data center edition в RAID10.
-
две, она из них date
-
У меня в 20.8.9 такого нет
-
И кстати, если попробовать код другого пользователя, что на ваш взгляд достаточно знает о sql, и ему помогает дока, то его код тоже не даёт того результата, что запрошено изначально.
Колонка из нижней таблицы теряется.
Ну где эффект от его более правилых знаний и доки?
Так и у меня до вопроса здесь получалось! -
Что у вас теряется?)
-
ну, остается только включить trace_log и воспрользоваться https://github.com/Slach/clickhouse-flamegraphGitHub - Slach/clickhouse-flamegraph: CLI utility for build flamegraph based on system.trace_log
CLI utility for build flamegraph based on system.trace_log - GitHub - Slach/clickhouse-flamegraph: CLI utility for build flamegraph based on system.trace_log
-
Всем привет! Никак не могу понять, в чем может быть проблема? https://dpaste.org/ARLZ
-
После каждого инсерта бд будет пересортировывать в фоне всю таблицу. Вынес в отдельную таблицу чтобы сортировалась небольшая таблица. Тут уместен вопрос: насколько дешевле отсортировать вот такую таблицу:
create table transactionHashIndex
(
tx_hash FixedString(32),
tx_id UInt64
) engine MergeTree()
order by (tx_hash);
чем вот такую
CREATE TABLE transaction_model_test
(
id UInt64,
tx_hash FixedString(32),
value UInt256,
nonce UInt64,
blockHash FixedString(32),
blockNumber UInt64,
transactionIndex UInt64,
from Nullable(FixedString(20)),
to Nullable(FixedString(20)),
time DateTime,
gasPrice UInt256,
gas UInt64,
input String,
networkId UInt16,
INDEX tx_hash_index (tx_hash) TYPE set(0) GRANULARITY 1000,
INDEX to_address_index (tx_hash) TYPE set(0) GRANULARITY 1000,
INDEX from_address_index (tx_hash) TYPE set(0) GRANULARITY 1000
) engine MergeTree()
ORDER BY (tx_hash ) -
-
Вроде нет проблемы.
Вас include смущают? Если вы их не создавали. то КХ их и не найдет -
на логе проблем нет
смотрите в /var/log/clickhouse-server/clickhouse-server.err.log -
да
это проверка контрольной суммы блока на соответсвие с теми XXX последними блоками что есть ZK
для deduplicate на уровне строк есть optimize_on_insert для Collapsing и Relacing -
про bloomfilter не знал, пойду гуглить
-
Планируется аналитика по блокам адресам и etc. Поэтому сортировать основную таблицу по хешам считаю утяжелением других запросов.
-
Ну тогда, смотрите в сторону моего +- варианта
-
Ок. Просто с точки зрения житейской логики не понятно, как защита от дублей при вставке связана с репликацией..
-
ну, вроде я объяснил как
"защита от дублей" в данном случае это защита от "повторных вставок одних и тех же данных целиком"
я думаю все дало в неправильном названии
и слово deduplicate можно было бы расширить, но назвали как назвали -
-
-
Добрый день. Такая ситуация: есть две таблицы с очень похожими данными, одинаковыми колонками, primary key и кодеками (одна как бы более новая версия второй). В одной лежит в два раза больше строк чем в другой, но места она занимает втрое больше, причем некоторые колонки больше на порядок. Подскажите, в чем может быть дело и как поправить сжатие.
-
Потому что цели другие. Вот из доки:
Это сделано для того, чтобы в случае сбоя в сети, когда клиентское приложение не может понять, были ли данные записаны в БД, можно было просто повторить запрос INSERT. При этом не имеет значения, на какую реплику будут отправлены INSERT-ы с одинаковыми данными. Запрос INSERT идемпотентный. -
ORDER BY таблиц одинаковый или разный?
-
-
Non replicated merge tree deduplication by alesapin · Pull Request #22514 · 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...
-
значит он дает разное размытие значений по колонкам которые отличаются по размеру...
и получается более рандомизированные данные по блокам...
у вас там точно какие нибудь compression codec не применены ? -
-
-
Там, вроде, они выбраны разумно. Например для колонки, значения которой повторяются десятки-сотни раз и которая идет вторым аргументам в ORDER BY, используется DELTA, LZ4
-
👍
-
-
Всем привет!
Подскажите, хочу применить TTL к таблице что-бы через день отправлял данные на HDFS
TTL d + INTERVAL 1 DAY TO DISK 'hdfs', обязательно ли к данной таблицы применять кастомную политику, а то с дефолтной у меня это не работает, выдает ошибку о том что диск hdfs не найден -
Joined.
-
-
Вторая колонка, впрочем в вашем варианте вы потеряли ее название, скопировав его дважды и видимо поэтому это не заметили.
https://i.imgur.com/KVXGvXK.png -
лучше KILL MUTATION сделайте
-
Для этого доступ в клиент нужен, на сколько понимаю, а с этим как раз и проблема
-
https://clickhouse.com/docs/en/interfaces/http/
send_timeout=3600&receive_timeout=3600 в URL ДобавьтеHTTP Interface | ClickHouse DocumentationHTTP Interface The HTTP interface lets you use ClickHouse on any platform from any programming language. We use it for w
-
если у вас есть доступ к каталогу /var/lib/clickhouse
то у вас есть клиент
clickhouse-client отлично работает на сервере и это просто симлинк -
Проблема в том, что у меня сервер в контейнере, который по стечению обстоятельств падает при запуске, а падает из-за таблицы, которой нужно откатить измение, чтобы контейнер заработал
-
-
маленькую конечно дешевле. если вам несложно генерировать снаружи монотонно растущий ключ (нет кластера), то трюк получается интересный. можно маленькую таблицу тогда сделать на embbededRockDB и апдейтить - там как раз быстрый key/value. Но безкластерный.
-
Спасибо за уточнение.
-
-
> После каждого инсерта бд будет пересортировывать в фоне всю таблицу. Вынес в отдельную таблицу чтобы сортировалась небольшая таблица. Тут уместен вопрос: насколько дешевле отсортировать вот такую таблицу:
Это не правда, не стоит париться на этот счет
Там будет сортировка слиянием отсортированных списков, почти бесплатно -
Кстати, еще один вопрос появился в этой теме. Сортировка перезаписывает файл или просто меняет порядок смещений "строчек" в файлах колонок (надеюсь понятно описал)?
-
Все мержи создают новые парты и файлы
-
Здравствуйте коллеги !
Возникла проблема при переходе с 20 в 21-ую версию.
Clickhouse у меня деплоен внутри кубернетса(kubernetes cluster) с 4 нодами. Есть соответственно 4 шардов clickhouse а .
У всех почти то же самое количество данных в базе данных. Но только один из шардов использует очень много диска и много памяти. не могу найти проблему.
Clickhouse version: 21.7.11.3 -
в кх парты иммутабельные, так что файлы с данными никогда не меняются и не перезаписываются, только создаются новые
-
А может помочь полное копирование таблицы через INSERT INTO copy SELECT * FROM table?
-
Всем привет. Подскажите, как быть с DDL при использовании MaterializedPostgreSQL?
Я в доке нашел строчку "DDL is not replicated, but can be handled (described below)", но ничего подобного я не нашел ни в русской, ни в английской версии.
https://clickhouse.com/docs/en/engines/database-engines/materialized-postgresql/MaterializedPostgreSQL | ClickHouse Documentation[experimental] MaterializedPostgreSQL Creates ClickHouse database with an initial data dump of PostgreSQL database table
-
Немного неочевидно как ее юзать. Я указал --output-dir/-date-to/dsn, оно мне нагеренило sql файлов с запросами, и никаких svg
-
контейнер в кубере? или просто docker ?
вы мутацию с alter table точно не путаете?
есть логи контейнера?
или в /var/lib/docker
поищите clickhouse-server.err.log
на хосте -
не очень понятно на что при этом надеетесь ?
данные теже, кодеки теже, на выходе должен получиться точно такой же результат -
Спасибо!
-
Всем привет, подскажите пожалуйста, итмеется у меня такой массив, сделал его через grouparray
мне нужно оставить только те строчки, где в массиве встречатеся определенное число, подскажите функцию пжлста -
has
-
Отправил вам SVG в личку.. Или прислать сюда?
-
Можно как-то уговорить КХ принимать IPv6-адреса без разделителей? А то он в нулл его конвертит
2a02d2478100332a39e88be2bd0a5418 -
SELECT CAST(unhex('2a02d2478100332a39e88be2bd0a5418'), 'IPv6')
─CAST(unhex('2a02d2478100332a39e88be2bd0a5418'), 'IPv6')─┐
│ 2a02:d247:8100:332a:39e8:8be2:bd0a:5418 │
└─────────────────────────────────────────────────────────┘ -
спасибо, топ!
-
Проблему удалось решить исправлением кода таблицы в файлах клика. Спасибо за помощь
Теперь разбираюсь, почему так произошло. Буду очень благодарен за помощь в поиске ответа на вопрос Как могла произойти ситуация, что при создании таблицы через клиент ошибок не было и таблица функционировала, но после перезагрузки докер контейнера, на котором был сервер, сервер начал перманентно падать из-за ошибки в объявлении таблицы(ошибка связана с недопустимостью использования DateTime64 в качестве версии для ReplacingMT, версия кх 20.4) -
подскажите, а как транспозировать табличку (примерно как вот тут в ответе https://stackoverflow.com/a/61782641) но разбив array of tuples на колонки?Pivot or equivalent in clickhouse
I'm new to clickhouse or for that matter in any columnar db. I need to pivot the table like we do in sql-server, postgres or any other row based db. I'm looking for a generic solution however solu...
-
-
спасибо. а можно как-то магически map поитерироать чтобы ключи не писать? в постгресе я функцию писал для такого в свое время.
-
Не понял вопроса, вы хотите во время запроса определить ширину таблицы?
-
Да
-
Так нельзя, только в два запроса: определить список всех ключей и сам запрос собственно
-
Я немного порылся в файлах, разжал из с помощью clickhouse-compressor и смотрю хексдампом. В старой таблице (она была создана с год назад, соответственно на другой версии КХ) полно нулей (как и ожидалось, потому что у меня много значений идет подряд), а в новой их вообще нет. Есть идеи, что могло произойти?
-
Ключ сортировки не меняли?
-
(уже спрашивали :p )
-
Нет, как раз смотрю колонку, в которой повторяются значения и которая в ключе сортировки. То есть там должны одинаковые значения подряд лежать и кодек DELTA должен давать сплошные нули
-
Ну если эта колонка не первая в ключе сортировки, то может увеличилась кардинальность предшествующих ключей?
-
-
Ну я бы еще посмотрел show create table <new table>, чтобы просто убедиться, что кодек стоит.
-
А в первой колонке нули то есть?
-
Может еще проверил бы кол-во партиций в старой и новой таблице.
-
Сделал, конечно =)
-
какая ошибка при загрузке?
какая версия clickhouse-server? -
И кстати, если значения одинаковые, то может вам нужен DoubleDelta?
-
DD не нужна в 90% случаях, она медленная
https://kb.altinity.com/altinity-kb-schema-design/codecs/codecs-speed/ -
Ошибка https://dpaste.org/L89F
Версия 20.4.9.110 -
DateTime64 совсем недавно разрешили использовать для VER
21.6, 2021-06-05
Enable DateTime64 to be a version column in ReplacingMergeTree. #23992 (kevin wan). -
Проблема а том, что до перезагрузки сервера ошибки не было, а таблица фунционировала
-
вы сделали даунгрейд КХ. Вы создали таблицу в более новой версии, это 1000000% гарантии, я готов сделать ставку на $10000
-
Думаю достаточно просто Delta для одинаковых значений
-
Как можно это проверить? Где можно найти логи, фиксирующие апгрейд/даунгрейд?
-
КХ в логах пишет свою версию постоянно, открываете лог до перезагрузки и смотрите
-
если подмешать в дельту больше нехарктерных данных то компресиия резко ухудшится.
например храним данные id, time, value CODEC Delta order by time
пока id один, value будет хорошо сжиматься потому что Delta работает
если id несколько то они начнут чередоваться, потому что order by time а не id, time -
я например такое неоднократно наблюдал, есть 10 партов, общим размером 1GB, делаем optimize, получаем итоговый парт 2GB
-
У меня данные устроены так, что при order by time, value (пользуясь вашим примером) должно быть много подряд одинаковых value, потому что все одинаковые value имеют одинаковый time
-
OK а у вас CODEC на всех колонках? Может у вас дефолтная компресия была ZSTD (config.xml) ?
-
-
select count(distinct value), count(distinct value,time) from table, если мне память не изменяет
-
я видимо пропустил часть дискусии, и потерял нить
-
а рестарт КХ или сервера был?
-
Я попробую подготовить минимальный какой-то пример, заодно может найду у себя ошибку =)
-
так это не имеет отношения к SQL , тоже самое будет и на бумажке и в любом языке программирования
можно использовать tuple (date, hour) >=('2021-09-19' , 17) AND (date, hour) <=('2021-09-26', 16)
или написать по нормальному огромную портянку с кучей OR -
Да, был
-
что из или 1 или 2?
в общем побились видимо файлы на диске или не были записаны
и есть check table , который кажется исправляет это -
ну да, я и писал, что optimize table final всё это дело поправил
-
Проблема в том что Optimize table final это такая штука которую невозможно использовать на проде.
-
-
ну я правильно понимаю
вы запустили
ALTER TABLE ... MODIFY COLUMN registration_time DateTime64(5, 'Europe/Moscow') ?
а потом что сделали? контейнер ребутнули? запрос завершился при этом или нет? -
Да, только ALTER TABLE ... был успешно(!) выполнен n дней назад. Независимо от этого сегодня был рестартован контейнер с сервером
-
-
а в system.query_log этот запрос видно?
-
в query_log вообще несколько записей полугодичной давности. Видимо, логирование отключено(не ругайте, не я не делал, я лишь разбираюсь)
Но то, что запрос был выполнен косвенно подтверждает файл мутации, на сколько понимаю -
Номер карты скинуть или почтовым переводом отправите?)
Стабильно воспроизводится, если создать ReplacingMT таблицу с версией на поле DateTime, а после сменить тип поля на DateTime64 - ошибки нет, но, если перезагрузить сервер, подняться уже не может -
ну таких условий в задаче не было. Можно еще и руками файл подправить.
а что можно поменять тип DateTime на DateTime64 и там данные нормальные, это странно ? -
Про номер карты, конечно, шутка, но каких условий не было?
Да, с данными все в порядке -
я в общем представлял себе что был create table ...
И такой create table с datetime64 в качестве ver можно сделать совсем недавно, у DateTime64 не было кода который разрешает такой create table, сам replacing работал случайно правильно для DateTime64. -
В любом случае, спасибо вам и BloodJazMan за помощь
Поимание ситуации многократно облегчило мне жизнь -
что интересно там проверка и не дает сделать альер
create table TR(A Int64, S Int64) Engine=ReplacingMergeTree(S) order by A;
alter table TR modify column S String;
DB::Exception: Cannot alter version column S to type String because version column must be of an integer type or of type Date or DateTime. (ALTER_OF_COLUMN_IS_FORBIDDEN)
alter table TR modify column S UUID;
DB::Exception: Cannot alter version column S to type UUID because version column must be of an integer type or of type Date or DateTime. (ALTER_OF_COLUMN_IS_FORBIDDEN)
alter table TR modify column S IPv6;
DB::Exception: Cannot alter version column S to type IPv6 because version column must be of an integer type or of type Date or DateTime. (ALTER_OF_COLUMN_IS_FORBIDDEN)
alter table TR modify column S IPv4;
Exception: Received from localhost:9000. DB::Exception: Cannot alter version column S from type Int64 to type IPv4 because new type will change sort order of version column. The only possible conversion is expansion of the number of bytes of the current type.. (ALTER_OF_COLUMN_IS_FORBIDDEN)
alter table TR modify column S Decimal64(3);
DB::Exception: Cannot alter version column S to type Decimal(18, 3) because version column must be of an integer type or of type Date or DateTime. (ALTER_OF_COLUMN_IS_FORBIDDEN)
alter table TR modify column S Float64;
DB::Exception: Cannot alter version column S from type Int64 to type Float64 because new type will change sort order of version column. The only possible conversion is expansion of the number of bytes of the current type.. (ALTER_OF_COLUMN_IS_FORBIDDEN) -
Большое спасибо!
-
-
друзья, помогите джуну разобраться с ReplacingMergeTree.
Согласно доке, если я вставляю строку с индексом, который уже был в таблице, - то новая строка заменит старую. И вот здесь это подтверждается:
CREATE TABLE db1.test_replacing
(
publisher String,
unique_id String
)
ENGINE = ReplacingMergeTree()
ORDER BY (unique_id)
INSERT INTO db1.test_replacing VALUES
('old_publisher', 'id1')
INSERT INTO db1.test_replacing VALUES
('new_publisher', 'id1')
SELECT * FROM db1.test_replacing FINAL
# результат:
# new_publisher id1
Однако в случае группировки реплейс не работает:
SELECT count(*), publisher
FROM db1.test_replacing
GROUP BY publisher
# результат:
# 1 old_publisher
# 1 new_publisher
Как заставить его заработать? -
Все работает. Вы сравниваете результат с final и без final
-
В вашем случае мердж не прошел и результат отчичается
-
а почему он не прошел, я ведь соблюдал (соблюл? соблюдил?) условия: вставил с таким же индексом
-
-
а не, все хорошо ) уже починили =) https://github.com/ClickHouse/ClickHouse/issues/28810Query setting `max_memory_usage` doesn't work for `CREATE TABLE ... as SELECT ...` · Issue #28810 · ClickHouse/ClickHouse
ClickHouse v.21.7.7.47 setting max_memory_usage doesnt work for 'create table .. as' queries for example: this query works create table test_table engine MergeTree order by a as sel...
-
кликхауз никому не обещал мёрджить сразу :) . Сливает записи потом. И не всегда
-
можно использовать final. Можно самому выбирать limit 1 by key. Можно делать optimize final. Если использовать без этого, то результат не гарантирован
-
Дедупликация данных производится лишь во время слияний. Слияние происходят в фоне в неизвестный момент времени, на который вы не можете ориентироваться.
https://clickhouse.com/docs/ru/engines/table-engines/mergetree-family/replacingmergetree/ReplacingMergeTree | Документация ClickHouseReplacingMergeTree Движок отличается от MergeTree тем, что выполняет удаление дублирующихся записей с одинаковым значени
-
не limit 1 by key, маленькая поправка, а сделать order by (значение) desc еще, тем самым выводить последнюю запись.
Но, одно из вариантов, чтобы ручками не делать постоянно OPTIMIZE TABLE ..., написать скрипт и добавить в крон.
Так или иначе, дубликаты в ReplacingMergeTree все равно остаются, об этом предупреждается в доке. - 30 September 2021 (167 messages)
-
Всем привет.
залил 4 миллирарда записей, вот такой запрос не может отработать, что не так?
select toStartOfDay(DateTime) as dt, count (*) as t from testDB.Logs
group by dt
order by dt -
есть у кого опыт использования Clickhouse с Grafana + cLoki? не могу разобраться чего для cLoki не хватает
-
что значит не может? скорее всего просто читает колонку DateTime с диска, диски медленные?
-
отваливается по таймауту
-
вот на раиде из hdd
SELECT
toStartOfDay(access_time) AS d,
count()
FROM fact_event
WHERE day >= (today() - 7)
GROUP BY d
ORDER BY d ASC
┌───────────────────d─┬────count()─┐
│ 2021-09-23 00:00:00 │ 2351725045 │
│ 2021-09-24 00:00:00 │ 2460509005 │
│ 2021-09-25 00:00:00 │ 2553989369 │
│ 2021-09-26 00:00:00 │ 2822430255 │
│ 2021-09-27 00:00:00 │ 2522411804 │
│ 2021-09-28 00:00:00 │ 2440207831 │
│ 2021-09-29 00:00:00 │ 2250999393 │
└─────────────────────┴────────────┘
7 rows in set. Elapsed: 16.597 sec. Processed 37.23 billion rows -
ну увеливайте таймаут
-
Доброе утро.
Подскажите пожалуйста имеет ли кликхаус подключение persistent connect?
проблема в том что при частых соединениях начинаются траблы с запросами. они долго отрабатывают до 5 сек. -
>persistent connect
смотря что вы под этим подразумеваете.
>проблема в том что при частых соединениях начинаются траблы с запросами. они долго отрабатывают до 5 сек
какой API, http/tcp?
у меня есть одно приложение, оно уже 5 лет непрерывно по http долбит КХ 100 запросов в минуту, и никих траблов. -
справился
13.97 sec.| 5,351,250,000 rows.| 20 GB -
Соединяюсь через phpClickHouse
через внешний IP
в коде вижу что соединение через new Http()
может гдето на сервере есть ограничение. не подскажете? -
если иметь готовую колонку с днем и не делать 4 млрд раз toStartOfDay(DateTime) , то быстрее раз в 5 будет
-
проблема скорее всего не там где вы думаете.
КХ использует весь CPU для выполнения запроса, поэтому если один запрос выполняется за 1 сек, то два запроса одновременных за 2 сек, а 10 запросов за 10 сек. -
вот некоторая статистика по кликхаусу
-
-
вот там где нет пиков сервер работает идеально а там где появляются пики сразу же появляются задержки
-
в том то и дело что запросы без нагрузки выполняются достаточно быстро порядка 0,05 сек
но вот в пиковые моменты непонятно как подпрыгивает до 5-10 сек -
при увеличении нагрузки плавным образом то и задержка должна расти плавно но не так же скачкообразно как будто не хватает каких то ресурсов. вот только каких не понятно.
-
Там где нет пиков. Пиков чего? Что нарисовано на графиках? Где график cpu? Сколько у вас cpu? У вас может мержи или мутации выжирают все cpu.
-
-
на сервере 36 ядер
-
И кто импользует cpu? Кх? Запросы в кх? Мержи? Инсерты?
-
а как это выяснить?
-
одно скажу что через htop все CPU использует КХ,
это сервер только для КХ -
top ? system.processes system.merges
-
не совсем понял что это
-
комманду надо выполнить в консоли?
-
Таблицы
-
все равно не понял.
-
таблица system.processes
-
select * from system.processes
-
понял. там много всего...
это чтото типа processlist как у mysql только более детально. -
SELECT * FROM system.merges
пустой
select * from system.processes
по разному. 1 - 4 строки -
Направьте пожалуйста в правильном направлении, нужно анализировать данные с очень большой таблицы более 2 млр записей, а запросы одиночные, как лучше запрашивать в таких случаях?
-
особой нагрузки то я не вижу в виде запросов. но однозначно пиковые значения CPU выше LA 32 явно сказываются не очень хорошо
-
system.merges пустой. там ни разу ничего не появилось
а вот system.processes ведет себя как то странно
переодически опрашиваю
показывает 1-3 запроса. собственно сам селект system.processes и 1-2 запроса на выборку данных.
и в некоторый момент начинает показывать только один запрос селект system.processes и через секунду сразу 100-200 запросов на вставку выборку данных. Такое впечатление что гдето возник затор и тут его прорвало...
В этот же момент подскакивает CPU -
ну и естественно elapsed достигает у каждого запроса до секунду
-
их же там штук 200 может быть
-
-
Через carbon-clickhouse
-
Решил проблему Всем спасибо )
-
Еще есть такой вопрос по выборке данных.
не знаю существует ли вообще такое.
Допустим в БД хранится пара данных сайт и просмотры. Сайтов может быть много. просмотры просто число разбитые по некоторым характеристикам
допустим есть данные для двух сайтов по трем параметрам
сайт просмотр параметр
1 5 1
1 8 2
1 12 3
2 1 1
2 7 2
2 13 3
можно ли как то сделать выборку чтобы была во первых группировка а во вторых чередование. или наоборот чередование и группировка
нужно получить чтобы сайты чередовались но и с одновременной сортировкой по просмотрам
результат должен быть таким
2 13 3
1 12 3
2 7 2
1 8 2
2 1 1
1 5 1
т.е. главное чтобы было чередование 1 2 1 2 1 2 а дальше уже сортировка по возможности. -
Привет.
Почему-то у меня перестала работать команда из документации для скачивания бинарника:
curl -O 'https://builds.clickhouse.tech/master/amd64/clickhouse' && chmod a+x clickhouse
Хотя скачивание по ссылке через браузер работает... -
curl -LO 'https://builds.clickhouse.tech/master/amd64/clickhouse'
-
Все привет, такая проблемка. Получается авторизироваться в КХ, но запросы из одного КХ в другие не выполняются, ошибка авторизации:
Code: 516. DB::Exception: Received from clickhouse-server:9000. DB::Exception: Received from clickhouse-02:9000. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED)
при этом если убрать пароль с пользователя default все работает -
Привет! А как можно в КХ преобразовать вложенные json в списки по уровню вложенности? Например, json вида {a:{b:c, f:g}, d:e} преобразовать в массивы [a, a, d], [b, f, e], [c, g, “”]
-
Добрый день, всем! Может кто ни будь уже придумал как реализовать в CH вот такой джойн.
selеct id, range,event_dt from tabA a
Left join
select id, start_range,end_range, eff_dt,exp_dt from tabB b
on a.id=b.id and b.start_range <= a.range and
b.end_range > a.range and
b.eff_dt <= a.event_dt and
b.exp_dt > a.event_dt; -
Добрый день как экспортировать дамп из контейнера на хост машину?, clickhouse крутиться с данными в контейнере
я предпологаю clickhouse-client --query "SELECT * from table" --format FormatName > result.dump нужно прокинуть типо docker exec container_name -c "clickhouse-client --query "SELECT * from table" --format FormatName > result.dump" вывод результата будет внутри контейнера? -
А мне по факту нужно на хост получить дамп
-
docker cp
docker cp: The `docker cp` utility copies the contents of `SRC_PATH` to the `DEST_PATH`. You can copy from the container's file system to the local machine or the reverse, from...
-
Привет. Хочу найти аналог unnest в Postgres.
select unnest(array ['a', 'b', 'c']),
unnest(array [1, 2, 3]);
+------+------+
|unnest|unnest|
+------+------+
|a |1 |
|b |2 |
|c |3 |
+------+------+
Пробовал arrayJoin, но результат не такой получается:
select arrayJoin(['a', 'b', 'c']),
arrayJoin([1, 2, 3]);
+--------------------------+--------------------+
|arrayJoin(['a', 'b', 'c'])|arrayJoin([1, 2, 3])|
+--------------------------+--------------------+
|a |1 |
|a |2 |
|a |3 |
|b |1 |
|b |2 |
|b |3 |
|c |1 |
|c |2 |
|c |3 |
+--------------------------+--------------------+
Можно ли как-то сделать из двух массивов два столбца без декартового произведения? -
select * from (select ['a', 'b', 'c'] x, [1, 2, 3] y) array join x, y
-
Большое спасибо!
-
Или arrayEnumerate
-
В случаи копирования, а мне нужен запрос в контейнер и его результат stdout на хост
-
1) Выполняйте запрос с хоста
2) приделайтк к контейнеру volume или шару, которые живут на хосте -
+ Понял,use волюме
-
Расшарить папку на хосте и писать туда из контейнера
-
Значит в природе докера существует два способа получить результат host<->container
1. cp
2. mount -
-
а что вы не можете подключиться через clickhouse-client напрямую к КХ? зачем оборачивать в docker exec? Такая команда должна положить вам локально файлик test.csv
docker run --net=host --rm -it yandex/clickhouse-client -h 0.0.0.0 --user user --query “select date, count() c from table group by date format CSV” > test.csv -
Можно, но хотелось узнать все возможность данного способа, собираю ключи решения
-
+
-
Может кому пригодится, то вот так можно до 3 уровней, ну а дальше по аналогии до скольки захотите: https://pastebin.com/RpSgyHgWSELECT json, arrayMap(x -> x.1, lvl3) AS key1, arrayMap(x -> x.2, - 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.
-
А как можно из JSON извлечь значение в строком представлении? то есть, из {‘a’: 1}, {‘a’: ‘1’} достать ‘1’ по ключу ‘a’
-
Если использовать JSONExtractString, то инты не достает, если использовать JSONExtract(json, 'a', toString(JSONType(json, ‘a’))), то не работает с массивами, требует указать тип элементов массива
-
может JSONExtractRaw?
-
он тогда стремные значения выводит: [
"\u0002�^",
"[]"
] -
видимо, какая-то обработка все же нужна
-
я пока такого франкенштейна собрал) if(toString(JSONType(json, 'a')) = 'Array', toString(JSONExtractArrayRaw(json, 'a')), toString(JSONExtract(json, 'a',if(toString(JSONType(json, 'a')) = 'Array', 'String', toString(JSONType(json, 'a'))))))
-
а исходные данные покажите
-
{
\"available_puids\" = [];
\"client_timestamp_ms\" = 1631221237209;
} -
Ну вообще это Yson, но там функции полностью аналогичные
-
что-то я туплю и не могу связать ваш изначальный вопрос и то-что вы скинули сейчас)
-
да, наверное тут два разных) если по поводу изначального, то такая проблема: SELECT
'{"a": "1"}' AS json,
JSONExtractRaw(json, 'a') вернет \"1\", а SELECT
'{"a": 1}' AS json,
JSONExtractRaw(json, 'a') вернет просто 1 -
SELECT * FROM test.Logs
PREWHERE TransactionNumber = 163195654
ORDER BY DateTime
52.97 sec.| 7,248,270,000 rows.| 54 GB
Что не так делаю, почему так медленно? ELK с теми же данными моментально отрабатывает -
Ну вы сортируете А потом выбираете 1 значение в разряженом индексе. И зачем pre where
-
с where тоже самое
-
Pre where работает автономно, его оч редко нужно руками прописывать.
-
Ну и вопрос скорее про сортировку. Скиньте ddl вашей твблицы
-
52.72 sec.| 7,262,020,000 rows.| 54 GB
вот с Where -
это как?
-
Это в целом неважно
-
Create table.. .
-
И order by уберите
-
-
Без order by сколько?
-
Да и * это тоже не очень хорошо, вы тяните все столбцы через io
-
Выберите конкретный столбец
-
без сортировки
47.33 sec.| 7,280,380,000 rows.| 54 GB -
47.17 sec.| 7,287,890,000 rows.| 54 GB
только 1 колнку взял -
может что-то с базой нужно сделать аля реиндексация....
-
Смотрите, у вас первое *, это значит вы тяните все столбцы в память, нужно выбирать только те столбцы котоыре нужны, это позволит сукорить запрос, далее, у вас нет индекса на колонке, то ест ьу вас впринцыпе фулскан идет. Order by тут попросту не нужен.
-
И да и нет, вы для каких целей решили взять КХ? Как key value?
-
Кажется что у вас сценарий использования неверный.
-
как замену эластика
-
эластик для мониторинга логов использую но он жрёт памяти столько что мама не горюй
-
кх в 20 раз меньше
-
Это нормально
-
-
Я не знаком с ним просто. Какой у вас сценарий использования?
-
КХ может сожрать всю память точно также, зависит от запроса.
-
сценарий ввёл в поле поиска значение он вывел все совпадения по всем полям (полнотекстовый поиск по сути)
-
Я не понимаю ваших претензий, будучи работая с эластиком, потому что сами разработчики указывали, что ластику требуется как минимум 32 GiB емнип, ну и еще про JVM не стоит забывать.
В КХ нет полнотекста -
я не про оперативку говорю)
-
-
про место на хардах
-
-
клик скушал 54 гига, в свою очередь эластик сожрал тербайт
-
Кажется вы ошиблись БД. Вам что то другое нужно, то что КХ умеет сжимать не значит что он даст ту скорость которая вам нужна.
-
ИИИИИИ? Простите, конечно, но вы полнотекстовый движок сравниваете с OLAP базой, вы понимаете эт?:)
-
-
Возьмите более дешевые диски тогда. Сделайте холодное и горячее хранение
-
не понимаю, я пытаюсь КХ разобрать подходит или не подходит под мои требования, пока только тестирую
-
Конечно вряд ли. У вас какие кейсы поиска, просто приведенный примере совсем неправильный
-
ClickHouse and Elasticsearch FAQs
Is ClickHouse a good alternative to Elasticsearch? Read our FAQ to see how ClickHouse compares against Elasticsearch in benefits, use cases, query performance, database security, and more.
-
ну прежде чем брать нужно найти может более эффективное решение
-
-
Из того что вы сказали, почти точно не подходит. КХ это про аналитические нагрузки.
-
Положите ластик на btrfs и по крону жмите старые шарды в zstd будет полтерабайта. //дурные советы
-
))
-
аналитика мне тоже нужна поэтому всё до кучи смотрю
-
ну отпишитесь потом если найдете решение
-
-
-
Про обратный индекс - есть еще вопрос интеграции в имеющуюся инфру (т.е. адаптер к Кибане), была попытка его сделать тут:
https://github.com/ITECOMMPAY/kibouseGitHub - ITECOMMPAY/kibouse: Clickhouse adapter for KibanaClickhouse adapter for Kibana. Contribute to ITECOMMPAY/kibouse development by creating an account on GitHub.
-
всем привет
У меня есть json, в котором есть массив interactive_elements
Массив нужно разложить на строки,делаю вот так и это работает
replace(arrayJoin(JSONExtractArrayRaw(raw_json,'interactive_elements')),'"','') as interactive_elements
Но если массив interactive_elements пустой, то тогда остальные поля с json ничего не возвращают
првоерка в кейсе на разер массива не помогает
,case
when length(JSONExtractArrayRaw(raw_json,'interactive_elements')) = 0 then ''
when length(JSONExtractArrayRaw(raw_json,'interactive_elements')) > 0 then replace(arrayJoin(JSONExtractArrayRaw(raw_json,'interactive_elements')),'"','')
end as interactive_elements -
-
привет, можете человеческим языком объяснить как работает таблица с движком буфер ? если я дам туда insert с 500 млн записей, она будет делать 500 insert по 1 млн в указанную таблицу, если я укажу это в настройках ? или нет ?
-
будет
-
в указанное количество потоков как я помню
-
Всем привет
Есть у меня запрос
SELECT *
FROM table
WHERE itemid = 154421277 AND date > '2019-01-03' AND date < '2025-07-14'
ORDER BY date WITH FILL FROM toDate('2021-07-01') TO toDate('2021-07-10')
Возвращает
|------|----|------------|-----|---------|-------------|
|154421277|2019-07-03|0.0|430.0|430.0|430.0|
...
куча строк
...
|154421277|2021-07-01|16.92307692307692|650.0|587.46|540.0|
|0|2021-07-02|0.0|0.0|0.0|0.0|
|154421277|2021-07-03|16.92307692307692|650.0|591.34|540.0|
|0|2021-07-04|0.0|0.0|0.0|0.0|
|154421277|2021-07-05|16.92307692307692|650.0|594.25|540.0|
|154421277|2021-07-06|16.92307692307692|650.0|596.59|540.0|
|154421277|2021-07-07|16.92307692307692|650.0|598.83|540.0|
|154421277|2021-07-08|16.92307692307692|650.0|600.0|540.0|
|0|2021-07-09|0.0|0.0|0.0|0.0|
Но если выбросить фильтр по датам и оставить
SELECT *
FROM table
WHERE itemid = 154421277
ORDER BY date WITH FILL FROM toDate('2021-07-01') TO toDate('2021-07-10')
то получаю скромное
|------|----|------------|-----|---------|-------------|
|0|2021-07-09|0.0|0.0|0.0|0.0|
Может кто подсказать, почему оно так происходит? Кажется, что фильтр не должен влиять на WITH FILL? -
https://github.com/AlexAkulov/clickhouse-backup
привет, пользовался кто бекапером? интересно решали ли проблему бекапа на диск отличный от того где запущен кхGitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages supportTool for easy ClickHouse backup and restore with cloud storages support - GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
-
подскажите по настройкам плиз - max_server_memory_usage нет в system.settings, версия 21.4.6.55, наверное там дефолт, но как бы это увидеть
-
<Information> Application: Setting max_server_memory_usage was set to 226.20 GiB (251.33 GiB available * 0.90 max_server_memory_usage_to_ram_ratio)
-
нашел в логах
-
https://clickhouse.com/docs/ru/sql-reference/statements/select/order-by/
Посмотрите здесь пример с WITH FILL. Не видя Ваш датасет - склоняюсь к этому вариантуORDER BY | Документация ClickHouseСекция ORDER BY Секция ORDER BY содержит список выражений, к каждому из которых также может быть приписано DESC или ASC
-
По этой странице я как раз и писал запрос
Проблема в том, что я не получаю пустые строки. И заполненные тоде не получаю без фильтра по дате. При этом фильтр ничего не делает, т.к. границы сильно больше, чем есть в данных -
Всем привет. Не могу понять почему эта штука select quantileExact(0.5)(x.t) from (SELECT arrayJoin([4,6]) t) x возвращает 6, ведь в мануале и русским и английским по белому написано что при уровне 0.5 будет медиана, а медиана из чётного числа элементов будет равна полусумме двух центральных
-
-
Это определение медианы работает только для чисел
-
-
-
-
О, а это интересный вопрос! Я проглядел когда low и high появились
-
Ещё и quantileDeterministic появился, пока на него заменил, чтоб на больших выборках автотесты не сигналили :)
-
Он давно появился, но только в этом году был пофиксин баг, который его правда сделал deterministic
https://github.com/ClickHouse/ClickHouse/issues/20480quantileDeterministic and friends are not deterministic · Issue #20480 · ClickHouse/ClickHouseDescribe the bug I've found that quantileDeterministic and relevant functions are not deterministic On 21.2.3 release: SELECT medianDeterministic(oid, oid) FROM ztf.dr4_meta ┌─medianDetermi...
-
Кажется можно в /var/lib/clickhouse/shadow например замаунтить диск
-
-
-
Непонятно, в чем вопрос
Колонку где?
В таблице
В запросе
groupUniqArray? -
День добрый, сегодня столкнулись с проблемой, свзянной с истекшим CA у letsencrypt (https://habr.com/ru/post/580092/) и движком URL (функцией url тоже). Не подскажете, куда посмотреть, как обновить список CA?
используем движок URL, запросы вида select * from url('https://site/results.csv', 'CSVWithNames', 'id String')
начали выдавать ошибку
Received exception from server (version 21.6.5):
Code: 1000. DB::Exception: Received from localhost:9000. DB::Exception: SSL Exception: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.
на хосте же с базой если попробовать curl'ом выполнить запрос, то tls работает без проблем30 сентября: Let's Encrypt и конец срока действия IdenTrust DST Root CA X330 сентября 2021 14:01:15 GMT оканчивается срок действия корневого сертификата IdenTrust DST Root CA X3.Это событие достойно вашего внимания по той причине, что после наступления этого момента ряд...
-
в запросе) потом через describe (запрос) уже обычно разбираюсь как создать таблицу
-
groupUniqArray(column) over(partition by key_column)
-
огромное спасибо! все работает как хотел
-
Какая ос?
-
ch развернут в докере, образ: yandex/clickhouse-server:21.9.2.17
uname -a
Linux 5.11.0-1017-aws #18~20.04.1-Ubuntu SMP Fri Aug 27 11:21:54 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux -
https://habr.com/ru/post/580092/
В Debian/Ubuntu:
В файле /etc/ca-certificates.conf нужно найти строчку:
mozilla/DST_Root_CA_X3.crt
и поставить в начало сроки символ "!":
!mozilla/DST_Root_CA_X3.crt
Далее, необходимо выполнить команду:
sudo update-ca-certificates
Помогает для не докера, но нужно рестартнуть кх после30 сентября: Let's Encrypt и конец срока действия IdenTrust DST Root CA X330 сентября 2021 14:01:15 GMT оканчивается срок действия корневого сертификата IdenTrust DST Root CA X3.Это событие достойно вашего внимания по той причине, что после наступления этого момента ряд...
-
В докере, как быстрый фикс, можно выключить проверку сертификатов думаю
-
LetsEncrypt Root Certificate (DST_Root_CA_X3) expiration issue. · Issue #29584 · ClickHouse/ClickHouse
Describe what's wrong URL table function / engine and etc refuse to work after September 30, 2021 with certificates signed with lets encrypt. Does it reproduce on recent release? Yes. How t...
-
Спасибо, пока как хотфикс отключил валидацию сертов
Работает -
-
версия кх? это чинили уже
-
21.8 вроде
-
создайте bug report и приложите create table
-
ок
Завтра постараюсь воспроизвести на небольшой таблице -
это неправильный вопрос.
clickhouse-backup моментально делает снепшот базы на диск где КХ потому что это снепшот на хардлинках!, и умеет заливать потом куда вам надо, куда настрили
Ну или тупо tar / rsync можете сделать куда вам надо -
следить придется за диском что бы он всегда был x2