- 01 October 2020 (249 messages)
-
Емнип в custom http handlers можно менять content-type (надо проверять)
-
В форматах - нет, такой переключалки нет, но относильно несложно прикрутить, можете открыть ишью с FR может быть кто-то сделает
-
-
https://clickhouse.tech/docs/ru/interfaces/http/#predefined_http_interface ; нужна версия КХ>20.3HTTP-интерфейс | Документация ClickHouse
HTTP-интерфейс HTTP интерфейс позволяет использовать ClickHouse на любой платформе, из любого языка программирования. У
-
доброе утро,
может кто-нибудь обьяснит что делаю не так?
select sumStateOrNull(id) as n
from (select 1 as id union all select 2)
DB::Exception: Nested type AggregateFunction(sum, UInt8) cannot be inside Nullable type
прошу прощения если совсем не в тему спросил, пытаюсь с комбинаотрами разобраться -
-
здравствуйте! а случайно никто не проверял, greatCircleDistance и geoDistance точно в метрах считают, или всетаки в тысячных долях мили?
-
Joined.
-
Joined.
-
-
-
Всем доброго дня. Коллеги, можете научить уму разуму, как правильно указать параметр kafka_skip_broken_messages для Kafka Engine?
сейчас kafka_skip_broken_messages = 1, и есть проблема:
генерируются очень много JSONEachRow данных, среди них есть кривые, это не починить, только фильтровать или самому, или Clickhouse, он умеет отбрасывать кривые, но - через какое-то время получение данных из Кафки останавливается, в логах Clickhouse видим - что запись пропущена, все как обычно, но по факту данные не забираются... и ничего с этим поделать не можем, помогает только offset reset на позднее значение (
очень похоже на бесконечный цикл, получаем кривое сообщение, почему-то не пропускаем его (не смещаем offset в топике кафки), и опять по новой -
-
kafka_skip_broken_messages = N, где N - это максимальное количество сообщений в блоке, которое допустимо отбросить
если количество битых сообщений в блоке больше N, то получается ситуация, которую Вы описываете -
ага, уже понятнее... т.е. по идее, надо указать N = размеру блока, так?
-
если для Вашего случая допустимо отбросить даже весь блок, то да
-
да, это допустимо, спасибо, попробуем
-
при kafka_skip_broken_messages = 1 он должен отбрасывать все невалидное, где-то были комментарии на эту тему
-
Kafka | Документация ClickHouse
Kafka Движок работает с Apache Kafka. Kafka позволяет: Публиковать/подписываться на потоки данных. Организовать отказоус
-
kafka_skip_broken_messages – максимальное количество некорректных сообщений в блоке. Если kafka_skip_broken_messages = N, то движок отбрасывает N сообщений Кафки, которые не получилось обработать. Одно сообщение в точности соответствует одной записи (строке). Значение по умолчанию – 0.
-
ну по факту этого не происходит... вернее так - работает пару часов, а потом останавливается
-
-
А что вы вообще делаете? Зачем там sumState?
-
ну я, как и говорил, пытаюсь разобраться как работают state функции. И в данном случае возник вопрос почему sumStateOrNull бросает эксепшн. Хотя sumState и sumStateOrDefault вроде работают
-
State нужны для Aggregate mat view. Они горорят КХ считай только промежуточные результаты агрегации. Делать селект к ними бессмысленно, чтобы увидеть результат нужно к таким столбца делать селект с sumMerge
-
да, я это понимаю. Даже если бы мой пример сработал, он бы вернул неособо читаемый результат. Но вопрос в том - почему он не работает, и должен ли он работать. Например пример с мердже тоже не работает
select sumMergeOrNull(n) from (
select sumStateOrNull(id) as n
from (select 1 as id union all select 2)
) -
У КХ полно такого поведения, что шаг влево-вправо - не работает. Возможно тут
select 1 as id union all select 2
после union не хватает алиаса для 2
Типа такого select 1 as id union all select 2 as id -
Привет коллеги, немножко оффтоп, но 100% кто то из вас сталкивался с такой проблемой
нужна кросс платформенная реализация функций хеширования чтобы результаты совпадали с ClickHouse - конкретно - cityHash64
конкретно для php и java. поделитесь ссылкой / советом если встречали и используете.
всегда есть варик взглянуть в сорцы и сделать аналог, я так для javahash делал, но вдруг есть готовое решение и я избирательно забанен в гугле. -
А не пробовал, посмотреть какой init value в кх, и за инициализировать этим же значением в другой реализации?
-
спасибо за наводку, попробую!
-
-
-
-
-
-
-
что-то на ссл ругается, он за пределами России доступен?
-
Link
Команда разработки аналитической СУБД с открытым кодом ClickHouse вновь готовится провести онлайн-митап. Мы попробуем новый, более масштабный формат: три быстрых lightning talks и два доклада побольше. В том числе выступят опытные технические специалисты, которые не работают в Яндексе, но активно используют ClickHouse. Вы увидите и знакомые лица — Николай Кочетов уже рассказывал про развитие СУБД. Встречу традиционно завершит доклад Алексея Миловидова.
-
Тоже самое. И view не удаляется и изменить нельзя
-
-
Он настоящий
-
-
Joined.
-
Можно сделать detach table "бубубу"
И удалить файл .sql -
Joined.
-
Всем привет! Какая клиентская библиотека для C# более предпочтительна к использованию?
-
А так супер, спасибо
-
Не понял. Название файла в линуксе не меняется?
-
Добрый день, подскажите можно ли использовать столбцец типа Nested внутри Nested
-
Order Nested(
ID Uint64.
Products Nested(
...
)
) -
Всем привет! А подскажите, как можно бороться с проблемой большой уникальности значений в КХ? У меня такой кейс, что бывает очень много уникальных значений (сотни миллионов), и мне нужно сгруппировать их как-то, но ценность предоставляют только те, которых больше чем 100 (или что-то около того), но таких не много. То есть вот пример запроса:
SELECT value, count() FROM t GROUP BY value LIMIT 50;
и данные у меня вот такие выходят:
value, count()
v1, 2
v2, 349340
v3, 4
v4, 1
v5, 3939
v6, 1
...
v9999999, 3
v100000000, 6
то есть я бы хотел узнать кол-во только v2 и v5, но для этого нужно все значения сгруппировывать и КХ разумеется это не может сделать (фильтры я конечно же использую, там где могу). Может есть какие-то инструменты или интересные мысли как с таким можно обойтись на неприличных объемах данных? -
-
нет.
https://t.me/clickhouse_ru/170385Denny Crane [not a Yandex bot] in ClickHouse не тормозитnested это сахар для create table. На самом деле это обычные массивы т.е. `Goals.ID` Array( UInt32) , `Goals.EventTime` Array(DateTime) если есть возможность выносить в колонки то лучше выносить. Например я столкнулся с такой проблемой у меня было `Goals.ID` Array(String) , `Goals.EventTime` Array(String) Goals.ID много разных, некоторые тяжелые, некоторые легкие и например выяснилось что если искать Goals.EventTime`[indexOf(`Goals.ID, 'aaaa')] то с диска читается 8TБ а если вынести в отдельную колонку Goals_aaaa то читает 80MB и запрос выполняется в 500 раз быстрее
-
Joined.
-
спасибо
-
https://github.com/DarkWanderer/ClickHouse.Client/
нам ок. но вставку делаем через клиент в основномGitHub - DarkWanderer/ClickHouse.Client: .NET client for ClickHouse.NET client for ClickHouse. Contribute to DarkWanderer/ClickHouse.Client development by creating an account on GitHub.
-
SELECT value, count() c FROM t GROUP BY value
having c>100
LIMIT 50; -
хотя может и можно, но будет у вас массивы массивов... но будет то же если руками их напишете
-
вообще ничего хорошего в Nested(Nested или Array(Array не получится , надо избегать такого
слишком большая колонка, огромного размера, и прочитать ее с диска уже проблема -
например у меня хранились так называемые audience аттрибуты K Array(String) V Array(String) это было невыносимо медленно
теперь у меня 10 ведер K0,K1,,,,,,,,K9 V0,V1,,,,,,,,V9, стало чуть лучше, слава богу SQL запросы пишет бобот, и ему все равно -
Добрый день, подскажите пожалуйста по событию ZooKeeperUserExceptions в таблице system.events.
Что это за событие такое и как его расследовать:
1. Причины появления
2. По каким ключевым словам искать в логах
3. Рекомендации как избежать
Версия CH: 20.5.2.7 -
Там же через HTTP, наверное лучше Native ?
-
ничего интересного на самом деле там нет и такое ощущение что половина из этого вообще не ошибки
bool isUserError(Error zk_return_code)
{
return zk_return_code == Error::ZNONODE
|| zk_return_code == Error::ZBADVERSION
|| zk_return_code == Error::ZNOCHILDRENFOREPHEMERALS
|| zk_return_code == Error::ZNODEEXISTS
|| zk_return_code == Error::ZNOTEMPTY;
} -
текст в логах
https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ZooKeeper/IKeeper.cpp#L89 -
Спасибо
-
View то не редактируются
-
Ща попробую буббубу
-
Через бинарный формат, там минимальный оверхед по сравнению с json, хорошая либа. есть ещё порт нативного формата в Clickhouse.Ado, но там есть проблемы с производительностью на винде из-за особенностей работы винды с сетью
-
У меня может быть и винда и linux . Приложение на .Net Core 3.1
-
Надо тогда бенчить. У меня на винде дольше сокет открывался с портом нативного протокола, чем весь запрос отрабатывал. А вот через http лучше было. Плюс в том http клиенте можно для простых запросов даппер заюзать
-
-
-
ну нет, вроде и с алиасом не работает. Но спасибо за помощь. Буду разбираться дальше
-
sumOrNullState VS sumStateOrNull
-
но так же не сработает, все равно придется все миллионы сначала сгруппировать, а потом уже отфильтровать по ">100" ? То есть КХ сделает тот же самый объем работы, что если бы и я кодом так фильтровал
-
я тогда не понял вопрос видимо.
новый ответ: Вам надо просто хранить в SummingMergeTree готовые count , тогда почти не надо группировать -
Joined.
-
-
Коллеги, такой вопрос, есть запрос на создание MATERIALIZED VIEW, который вылетает с сообщением что памяти нет, мемори треккер бдит. ну, вылетает и вылетает. а оказывается я напрасно так верил мемори трекеру, если мы втыкаем в max_server_memory_usage_to_ram_ratio значение 2.0 этот запрос проходит. версия 20.4. есть какие то баги связанные с тем что там трекер считает? если смотреть на сам процесс, на его память которую скушал там вообще что то в районе 10Гб а падает он с сообщением что он вот вот границу в 100Гб пересечет
-
ну да и баги есть и неточно считает. Надо проверять в последних КХ ваш кейс.
со спилингом на диск c max_bytes_before_external_group_by нормально считает память? -
-
не знаю, у меня тут дебаггинг по переписке. насколько я помню он у нас включен. сеичас попрошу проверить
-
неточно настолько что промахнулся в десять раз?
-
сегодня я кстати буду долго и нудно рассказывать почему populate в текущем виде не нужен и как без него все делать
-
на встрече? а она сегодня?
-
через 15 минут.
-
черт вообще счет дням потерял с этим карантином
-
в 20.4 наверное и в 10 раз мог промахнуться, было что-то такое
-
<max_bytes_before_external_group_by>96544594944</max_bytes_before_external_group_by>
-
в общем 95Гб
-
на машине 128гб
-
я нашел пару issues на гитхабе, но не уверен что это то что и у нас происходит
-
о господи, опять upstream merge делать...
-
а нет митап через час. В 18 MSC
-
Коллеги, а на какой платформе будет онлайн встреча? стрим будет на youtube?
-
У меня юзекейс грубо такой: программа на .Net Core собирает данные с приборов (по сети Ethernet) каждую 0,5-1 секунду и должна ложить в БД. А клиенты (разные) должны их оттуда забирать как текущие так и архивные данные. Както так.
-
не должно быть существенной разницы http или tcp (для одного и того же формата типа Native)
-
Ну как по мне библиотека от DarkWanderer самое оно, там очень удобный инсерт через DataTable
-
разница может быть из-за LowCardinality , т.е. если очень большой трафик, гигабайты, то LowCardinality может дать профит в Native.
только проблема в том что LowCardinality дофига сложный и его умеет только clickhouse-client -
который на самом деле тот же бинарник что и сервер
-
вам надо открыть файл, поменять в нем скрипт, переиминовать файл. используя вим, нано или ещё что-то.. через КХ ничего делать не надо.. но бубубу+пересоздать тоже ок
-
Трафик не гигабайты. Килобайты или мегобайты. Спасибо за пояснения!
-
Спасибо. Буду юзать эту либу
-
>По умолчанию ClickHouse использует алгоритм hash join. ClickHouse берет <right_table> и создает для него хэш-таблицу в оперативной памяти. После некоторого порога потребления памяти ClickHouse переходит к алгоритму merge join.
https://clickhouse.tech/docs/ru/sql-reference/statements/select/join/#memory-limitations
добрый день, подскажите пожалуйста указанный merge join тоже имеет ограничения по memory или рано или поздно должен выполниться ? не могу найти деталей по merge join в докахJOIN | Документация ClickHouseСекция JOIN JOIN создаёт новую таблицу путем объединения столбцов из одной или нескольких таблиц с использованием общих
-
аха "лучше, быстрее, выше, сильнее".
смотря для чего. я лично не заметил.
Олег для нас допилил ещё поддержку сырых форматов. поэтому оно вообще теперь шикарно... -
у нас тоже и винда и линукс (на .нет кор).
-
рано или поздно выполнится, разница может быть существенной, типа 17 сек HJ vs 17 часов MJ
и есть настройки partial_merge_join_rows_in_right_blocks partial_merge_join_left_table_buffer_bytes -
понял, а насколько предположительно повлияет использование ключа сортировки в условии join в этом случае ? (если таблицы по данному ключу отсортированы)
-
Ну после переименования файла что надо сделать? Клик то когда поймёт что поменялось в этой папке
-
никак не влияет вообще.
это не чистый MJ , это partial MJ который считает что таблицы не отсортированы и нет оптимизаций за счет сортированности -
чистый MJ пока внедрить невозможно, он не вписывается в дизайн pipeline
-
детач / атач (или рестарт -- что ровно тоже самое)
-
А detach надо имени view сделать?
-
да, атач новому имени
-
А можно ли настроить CH так чтобы он последние поступающие N-записей в определенную таблмцу держал в памяти - для более быстрой отдачи данных клиентам ? Что то наподобие Disk + Memory Cache...
-
как бы нельзя и не нужно.
в принципе они и так в кеше линукса лежат чаще всего.
есть еще buffer engine -- он хранит в памяти записи которые еще сброшены в таблицу -
нее, почему не надо группировать, так как кардинальность высокая, будет не 100 миллионов записей, а 90 миллионов, если я мат вью навешаю на таблицу. Это же не решит проблему, а лишь задублирует данные. Может в таких случаях SAMPLE секция как-то помочь?
-
Buffer Engine уже в самом CH? Его нужно настраивать ?
-
sample позволит как бы работать с рандомным 1%
Я бы просто переливал записи у которых cnt >100 в отдельную таблицу кроном -
в самом КХ, в документации читайте, скорее всего вам не поможет, да и вы пытаетесь решать несуществующую проблему
-
-
ща ссылку кинут
-
Всем привет!
Подскажите, пожалуйста, с чем может быть связана ошибка
Code: 999, e.displayText() = Coordination::Exception: Connection loss (version 20.8.2.3 (official build))
при удалении данных из таблицы ReplicatedMergeTree? -
партов наверное больше чем 5000
надо лог КХ чтобы увидеть ошибки полностью -
Митап:
https://yandex.zoom.us/j/96362059647?pwd=Qzg3bW15cHdpdmNSeTJ6czh1WDkrZz09Join our Cloud HD Video MeetingZoom is the leader in modern enterprise video communications, with an easy, reliable cloud platform for video and audio conferencing, chat, and webinars across mobile, desktop, and room systems. Zoom Rooms is the original software-based conference room solution used around the world in board, conference, huddle, and training rooms, as well as executive offices and classrooms. Founded in 2011, Zoom helps businesses and organizations bring their teams together in a frictionless environment to get more done. Zoom is a publicly traded company headquartered in San Jose, CA.
-
None
-
сюда можно скинуть?
-
А в ютубе не будет трансляции?
-
public async Task SaveData<TData>(ClickHouseConnection connection, IEnumerable<TData> data, string tableName, CancellationToken ct = default)
{
using (var bulkCopy = new ClickHouseBulkCopy(connection))
{
bulkCopy.DestinationTableName = tableName;
DataTable table = new DataTable();
using (var reader = ObjectReader.Create(data))
{
table.Load(reader);
}
await bulkCopy.WriteToServerAsync(table, ct);
}
} правда из стороннего еще FastMember заюзан для маппинга. А так - на входе коллекция объектов с такими же полями, как и столбцы таблицы, и вперед -
должна быть емнип
-
ну кусок скопипасте, там наверное что-то про len() в zk
-
2020.10.01 14:46:52.950076 [ 26448 ] {983980f8-fda4-469e-b995-afaf46b3499d} <Error> executeQuery: Code: 999, e.displayText() = Coordination::Exception: Connection loss (version 20.8.2.3 (official build)) (from 10.0.0.7:44320) (in query: alter table [ALTERING TABLE HERE], Stack trace (when copying this message, always include the lines below):
0. Poco::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x1
a80ae30 in /usr/bin/clickhouse
1. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0xff9
e75d in /usr/bin/clickhouse
2. Coordination::Exception::Exception(Coordination::Error) @ 0x1826763d in /usr/bin/clickhouse
3. ? @ 0x18278b40 in /usr/bin/clickhouse
4. DB::EphemeralLocksInAllPartitions::EphemeralLocksInAllPartitions(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::ba
sic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, zkutil::ZooKeeper&) @ 0x17b8f356 in /usr/bin/clickho
use -
на канале ClickHouse тишина...
-
Про len() ничего нет.
Там потом ворох ошибок "Session expired" -
-
Привет
В доке про distributed написано:
"Для выбора шарда, на который отправляется строка данных, вычисляется выражение шардирования, и берётся его остаток от деления на суммарный вес шардов. Строка отправляется на шард, соответствующий полуинтервалу остатков от prev_weights до prev_weights + weight, где prev_weights - сумма весов шардов с меньшим номером, а weight - вес этого шарда. Например, если есть два шарда, и у первого выставлен вес 9, а у второго 10, то строка будет отправляться на первый шард для остатков из диапазона [0, 9), а на второй - для остатков из диапазона [9, 19)."
а если выражение шардирования отдает строку? -
select count() from system.parts where active and table = 'xxxx'
-
-
Прямо сейчас присоединяйтесь к митапу в Zoom
https://yandex.zoom.us/j/96362059647?pwd=Qzg3bW15cHdpdmNSeTJ6czh1WDkrZz09 или YouTube https://www.youtube.com/watch?v=1LVJ_WcLgF8Join our Cloud HD Video MeetingZoom is the leader in modern enterprise video communications, with an easy, reliable cloud platform for video and audio conferencing, chat, and webinars across mobile, desktop, and room systems. Zoom Rooms is the original software-based conference room solution used around the world in board, conference, huddle, and training rooms, as well as executive offices and classrooms. Founded in 2011, Zoom helps businesses and organizations bring their teams together in a frictionless environment to get more done. Zoom is a publicly traded company headquartered in San Jose, CA.
-
None
-
тогда вы должны использовать какую-то функцию хеширования
например cityHash64(текстовоеполе) -
кстати, какую лучше выбрать?
-
cip? city?
-
cityHash64
-
Детач не помогает. Удалил файл с этой view-рестартнул -ничего не изменилось. Drop table пишет file not found
-
так уже нет ее
-
Есть
-
каким образом вы узнали что она все еще есть?
-
Joined.
-
Joined.
-
добрый вечер! подскажите, а как работает (или где почитать) функция max для tuple?
В таком примере - SELECT max ((id,timestamp,msisdn)) FROM....
Хотелось найти последнюю по id и timestamp запись для msisdn, но понял, что не знаю как с tuple работает max -
-
а, ну ясно
8800 - это больше, чем рекомендуется, насколько я помню -
Планировал уменьшать число партиций, видимо, настал тот час.
-
Joined.
-
это можно решить, добавив в ZK параметр с размером
-
я писал про это тут в чате и гитхабе есть тикеты где я объяснял в чем дело и как чинить, после митапа найду если надо
-
спасибо, был бы очень благодарен!
-
о я вспомнил ключевое слово ! jute
https://t.me/clickhouse_ru/172801 -
спасибо!
-
select max(aa) from (
select tuple(1,0,0) aa UNION ALL
select tuple(1,1,0) UNION ALL
select tuple(0,0,1) UNION ALL
select tuple(0,1,1)
);
-- (1,1,0) -
теперь понятно, спасибо!
-
у вас найдется max id, среди них max timestamp, среди нах max phone
-
элементы тупла сравниваются слева направо
более простое обяснение (y , m, d ) > (2020, 10, 1) -
ага, логично!
-
-
Привет.
has() в среднем должен быть быстрее чем arraySum() ?
По тестам получается наоборот: https://pastebin.com/kzZny7JY
не на много, но все-такиb90d01e0bd9a :) SYSTEM DROP MARK CACHE; WITH 6453 AS l, 2100 AS r SELECT count(c - 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.
-
Всем привет
Подскажите, пожалуйста, куда капать?
Сценарий следующий: есть скрипт, при помощи которого собирается таблица. Таблица собирается из других таблиц этой же схемы. В скрипте производится итерация по id (условно города). Вставка происходит пачками этих id. Происходит такое, что не производится вставка некоторые id.
Дальше я определяю эти айди. Повторно осуществляю их вставку, но безуспешно. В чем дело? -
insert_deduplication
-
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/replication/
Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоков данных одинакового размера, содержащих одни и те же строчки в одном и том же порядке), блок будет записан только один раз. Это сделано для того, чтобы в случае сбоя в сети, когда клиентское приложение не может понять, были ли данные записаны в БД, можно было просто повторить запрос INSERT. При этом не имеет значения, на какую реплику будут отправлены INSERT-ы с одинаковыми данными. Запрос INSERT идемпотентный. Параметры дедуплицирования регулируются настройками сервера merge_tree -
-
-
-
вы уверены что это не просто девиация по ИО? сделайте max_threads=1
-
-
он не удаляет, они все там сохраняются
-
ща все объяснят
-
дальше
-
-
-
Александр говорил что в запрос подставится WHERE _sign=1
-
если спецом в селект это поле не добавлять
-
-
Всем привет! Подскажите, хочу лить в кх логи неструктурированные - большой стринг в message, какую степень сжатия можно ожидать?
-
так же как zstd/zip. зависит контента строки
но лучше так не делать, это не про КХ -
чОрт =) кто-то решил из 1С выргужать данные в ClickHouse ;))
-
селект работает из неё? имхо она уже не существует
-
Привет, чото дистинкт не работает...
select di from (select distinct ins as di from allins final where toDate(ts)='2020-09-28') x where x.di not in (select distinct ins from allins_1d where toDate(ts)='2020-09-28')
┌─di───┐
│ ACUS │
└──────┘
┌─di──┐
│ JJE │
└─────┘
┌─di──┐
│ JJE │
└─────┘
┌─di──┐
│ JJE │
│ JJE │
└─────┘
┌─di───┐
│ RBIN │
│ RBIN │
└──────┘ -
заметим если убрать дистинкт из второго запроса, то всё норм. Final не влияет.
-
-
UNION есть, MINUS / EXCEPT нету ;(
-
В доке написано, что только для типа static, что не подходит...
-
А есть хороший туториал по созданию и управлению кластера? Или может даже целый курс какой то?
-
подвезли вот
-
-
как здорово.
“отличные новости, народ, я починил трубы для подачи ядовитой слизи!” -
-
-
-
-
-
-
-
-
-
-
-
Joined.
-
-
Привет. Сделал MV над MV и он почему-то не заполняется. В доке не нашел почему. В чем может быть дело?
-
ой ли. завтра тут будет видео на ютюбе =) и там очень детально будет рассказано
-
https://youtu.be/1LVJ_WcLgF8
смотреть с +2ч30м от момента начала -
Всем привет. Пишу сюда, т.к. уже весь день борюсь с одной проблемой в КХ.
Мне нужно конвертнуть float32 to string. В базе, в колонках c float32, есть значения превышающие 7 знаков, допустимые для float32. Но отображаются они нормально когда использую jdbc драйвер для КХ (из приложения или из DataGrip). Но когда делаю select через клиент, то значения округляются.
Мой вопрос в том, можно ли как-то выгрузить эти значения в виде string-a без округлений и потери точности.
У меня получилось экспортную таблицу используя jdbc, но используя стандартный КХ клиент не получается (((
Также подойдет решение напрямую конвертнуть float32 в Decimal128, но без заполнения оставшихся знаков после запятой шумом. -
Вот пример с запросом напрямую
-
-
-
-
-
Да, но скорее всего это просто ближе к правде, а 700 это тоже какое то странное округление на самом деле
-
Ну 700 там на самом деле лежит
-
IEEE 754, он такой(
-
(((
-
сильное заявление:)
SELECT hex(a)
FROM
(
SELECT CAST(9870109710, 'Float32') AS a
)
┌─hex(a)───┐
│ 7B131350 │
└──────────┘
Hex to float 9.87011e+09 -
-
Ну я его вручную таким вставлял просто
-
-
Ну, вставлял ты одно, а сохранялся float и именно при сохранении происходит потеря точностьи
-
Теперь яснее. А чего он мне нормально тогда отображается тут?
-
Может JDBC запрашивает на самом деле не в float32, а в float64 или как то еще, а потом округляет
-
Добрый вечер, подскажите а как кликхаус удаляет записи? Была мысль освободить место на диске удалив записи не по ключу партиционирования. Сделал ALTER TABLE DELETE WHERE подождал записи типа удалились, по селекту их нет, но места особо не прибавилось :( Делал OPTIMIZE ждал сутки, но место не возвращается, походу где то они лежат. Можно их как то все таки зачистить?
-
Joined.
-
Хмм, интересное у него тогда поведение.
-
@dj_mixer Спасибо огромное. Было два косяка - не совпадало имя алиаса и прикрепил к .inner (уже думаю над тем чтоб делать отдельную таблицу)
-
Вася это ты?
-
Осталось понять который )
-
-
-
-
Не ) не был там ни разу
-
-
По-моему. Drop помог. Но уже завтра посмотрю
-
У мв ничо такие диваны)
-
-
Joined.
-
нет не пробовали Sampling
-
Большое спасибо за доклад, особенно про MV!
-
И в целом новыеи фичи очень ждём :)
-
-
Joined.
- 02 October 2020 (85 messages)
-
действительно sumOrNullState работает. Не понимаю еще почему и в чем между ними разница, но буду разбираться. спасибо
-
Вроде это чинили (относительно недавно)
-
Коллеги а есть планы уйти с телеги? Это все таки мессенджер. Не очень удобно искать ответы на вопросы
-
удобно
-
вроде
-
Искать не удобно, переписываться отлично, было бы неплохо экспортировать в форум какой-то, что бы с поиска гугла находилось
-
Поиск вообще огонь
-
есть канал в Slack, в нем очень удобны были бы треды для каждого вопроса. Но там активности пока не наблюдается. А для серьезных вопросов было бы хорошо двинуться туда
-
Joined.
-
да ладно, из всех инструментов поиск лучше всего работает именно тут.
-
-
Ну может stack, яндекс кью , гит, форум?
-
Joined.
-
Joined.
-
Здравствуйте. Пытаюсь удалить поле в базе, но в ответ DB::Exception: WRITE locking attempt on ... has timed out! (120000ms) Possible deadlock avoided
-
Выставил max_threads = 1. Тот же результат. Почему-то, когда время скорость чтения с диска равно между запросами, то и время работы запроса тоже почти равно, хотя "интуитивно" has() должен быть быстрее. Ну и почему-то с диска данные читаются быстрее когда используется arraySum() чем когда has().
В https://pastebin.com/ZCVvCW5C несколько результатов запросов.03b65d9afb49 :) SYSTEM DROP MARK CACHE; SYSTEM DROP UNCOMPRESSED CACHE; WITH 645 - 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.
-
во время запуска СПУ одинаково нагружен?
судя по разницам у вас прыгает ИО а в целом все одинаково примерно.
можете проверить через time clickhouse-client -q "query" есть ли разница в СПУ time.
по сути has сделает то же что у вас в аррайсум (сравнение), разницы быть особо и не должно. -
Машина чистая. Только для теста.
И arraySum же весь массив должен будет проверить, а has на первом же равном эллементе должен остановиться. Или нет ? -
нет, там все сложнее думаю =) simd все дела...
-
ну и для аррайСум могут быть инструкции какие то, arraySumIf реально может быть быстрее. проверьте на очень длинных массивах
-
С значительно удлиненным массива буду пробовать, спасибо. arraySumIf не вижу такой функции. Да и -If вроде к аггрегаторам можно только прикрепить
-
да, упростил описание. имелось ввиду arraySum(If(xxx))
-
короче лучше тестировать через time - там покажет CPU time. т.е. может быть у вас latency на диске большой ещё 100500 причин
-
-
Joined.
-
У кого то были проблемы при удалении колонки из кликхаус? У меня lock_acquire_timeout стоит на 5 минут, но ето не помогает
-
Joined.
-
добрый день коллеги! Вчера на митапе было сказано что последняя lts версия это 20.8.x , зашел на гитхаб и это никак не отражено.Так задумано или еще не добавили приписку lts к версии?
-
чтоб враги не догадались
-
а если серьезно?))
-
Ещё не добавили, в ближайшее время добавим.
-
спасибо!
-
-
Добрый вечер, подскажите а как кликхаус удаляет записи? Была мысль освободить место на диске удалив записи не по ключу партиционирования. Сделал ALTER TABLE DELETE WHERE подождал записи типа удалились, по селекту их нет, но места особо не прибавилось :( Делал OPTIMIZE ждал сутки, но место не возвращается, походу где то они лежат. Можно их как то все таки зачистить?
-
на всех репликах
select * from system.mutation where not is_done -
и что много в % от общего кол-ва удалилось?
-
по-моему StateOrNull это комбинация которая не имеет смысла, т.е. она возможна, потому что это комбинатор, но в итоге получается нонсенс
-
Чуть больше 10%
-
ну из-за компресии могло добавится 5% места например
-
Code: 60, e.displayText() = DB::Exception: Table system.mutation doesn't exist. (version 20.9.2.20 (official build))
-
mutations
-
Screenshot
Captured with Lightshot
-
ну а крайняя справа колонка где?
latest_fail_reason │ String -
она пустая
-
-
select count() from (
select cast( country_id, 'Array(UInt16)') from ....
) -
105936541350
-
похоже что эта мутация Array(UInt16) все еще идет. Надо ждать.
Я бы в логах искал по имени мутации что там пишется. -
-
Спасибо
-
Ребята, подскажите пожалуйста. Если у меня на одну партицию где-то 200 - 300 активных кусков собирается это нормально ? Или имеет смысл замедлять вставку и увеличивать количество буферизируемых данных перед вставкой ?
-
Сложный вопрос. Смотря сколько строк вы вставляете одним инсертом и как часто.
В общем случае это много. КХ скорее всего тратит много лишних ресурсов на мелкие инсерты и мелкие мержи -
Joined.
-
-
visitParamExtractString но пробел лишний там у вас для visitParam
поэтому JSONExtract -
привет SELECT count()
FROM numbers(5, 10) что должен вывести этот запрос? -
я думал 5. а выводит 10
-
20.8.3.18
-
выпросите начиная с 5 , дай мне 10 чисел
-
SELECT *
FROM numbers(5, 10)
number
5
6
7
8
9
10
11
12
13
14
10 rows in set. Elapsed: 0.001 sec. -
извините, видимо я не правильно прочитал смысл по документации
-
Почитал доку по реплецированию, немного не понял каким образом клиент решает на какую реплику писать, ведь если я задам адрес определённо ноды и она упадёт, то приложение не сможет загрузить данные хотя есть другие живые ноды? Или мне нужно в приложении это предусмотреть и в случае фейла импортить во вторую ноду? Ну или как то из zookeeper'а читать кто сейчас живой..
-
в приложении..
-
нужно либо в аппе решать либо использовать clickhouse-proxy
-
Спасибо. сейчас гляну что за clickhouse-proxy
-
Я проксю использую, чтобы аналитиков натравить на реплики продукшен-нод, чтобы они не мучали основные ноды.
-
Joined.
-
Коллеги, здравствуйте.
Помогите побороть curl клиент и отслеживание прогресса.
Есть скрипт который через curl ходит выполнять долгий запрос в clickhouse.
При этом мы хотим более менее отслеживать прогресс для чего пользуемся параметрами &send_progress_in_http_headers=1&http_headers_progress_interval_ms=1000
Так же так как в результате предполагается довольно много данных мы результат выполнения сразу пишем в файл.
Вопрос.
Если в ходе выполнения запроса у CH кончится память, то он вернет некоторую ошибку ‘Code: 241, e.displayText() = DB::Exception: Memory limit’
Проблема в том что curl при запросе последнего код ответа отдает 200. Response пустой, так как перенаправляли в файл.
Есть ли возможность не заглядывая в файл и не читая поток налету определить, что в результате выполнения произошла ошибка?
Без отслеживания прогресса конечно ловим 500 -
-
А при этом на каждой ноде есть distributed таблица с которой идут селекты, верно?
-
wait_end_of_query ?
https://github.com/ClickHouse/ClickHouse/issues/10811 -
Спасибо. Попробую. Но не уверен что подойдет.
Так как ответ в файл большой. И ждать полное завершение выполнения запроса и при этом не получать данных может быть проблематично -
Joined.
-
здравствуте! что в этом создании таблицы нет так? он работал летом
-
CREATE TABLE Events2 (
BulkId UUID,
QueryString String,
LogDate DateTime,
EventDate Date,
DeviceType LowCardinality(String),
DeviceName LowCardinality(String),
DeviceModel LowCardinality(String),
OSName LowCardinality(String),
OSVersion LowCardinality(String),
AppVersion LowCardinality(String)
)
ENGINE = MergeTree
PARTITION BY toYYYYMMDD(LogDate)
ORDER BY LogDate
TTL LogDate + INTERVAL 1 MINUTE DELETE -
такая ошибка сейчас:
-
Expected one of: NOT, SETTINGS, FORMAT, LIKE, AND, OR, IN, BETWEEN, token, IS, NOT LIKE, NOT IN, GLOBAL IN, GLOBAL NOT IN, QuestionMark, PRIMARY KEY, SAMPLE BY, INTO OUTFILE (version 19.17.5.18 (official build))
-
version 19.17.5.18 TTL LogDate + INTERVAL 1 MINUTE DELETE
-
просто TTL LogDate + INTERVAL 1 MINUTE
-
DELETE появился позже, в 20х, потому что появился еще MOVE
-
большое спасибо!
-
А вот такая ошибка - может сразу подскажите -
-
DB::Exception: Cannot reserve 1.00 MiB, not enough space
-
вопрос снят, это просто мой косяк, сории
-
Joined.
- 03 October 2020 (66 messages)
-
Привет! Подскажите пожалуйста, есть 3 шарда по 2 реплики. Создаю топик в Kafka
docker exec -t clickhouse-kafka \
kafka-topics.sh \
--bootstrap-server :9092 \
--create \
--topic TopicNameHere \
--partitions 6 \
--replication-factor 1
но, если указать 6 партиций (--partitions 6) в топике, то читают только из двух шардов 3-я простаивает, а если указать больше, скажем 12 (--partitions 12), то все нормально. Почему не хватает 6 партиций там же по идее каждому должно достаться? -
для CH важно чтобы данные в таблицу писались строго отсортированные по дате?
-
т.е. сперва записать инфу за сегодня, а потом за вчера - что нибудь сломается?
-
-
если потом я буду делать выборки по дате - запрос нормально отработается ?
-
-
-
-
Запрос будет простой, просто получить все записи за период
-
Joined.
-
Здравствуйте! Можно ли группировать по extractURLParameter(URL, name)? Задача такая - в таблицу сырых событий пишется queryString, весь. В мат вьюху хочу писать уже в отдельные поля разобранный queryString
-
и сгруппированный по ним
-
или queryString всеже лучше разбирать на клиенте?
-
просто если в клике так можно, было бы круто
-
-
-
спасибо!
-
-
Ребят не подскажите, как дебажить, есть табличка kafka engine, перестали в неё поступать данные, ошибки в логах: <Trace> StorageKafka (log_waffa5_in_parsed): Re-joining claimed consumer after failure, debug all не отображает доп. Информации. Я предполагаю, что изменился формат сообщения или что то не так с форматом jsonEachRow, которые приходят, поля совпадают, типы тоже. С виду с json все в порядке, но возможно я не отловил «плохие» сообщения. Собственно как это проверить, есть какой либо приклад на проверку соответствия сообщения формату/полям и т.п.? Или может быть кликхаус где то это логирует? Версия 20.8.53
-
Можно наверно так + interval 30 day
-
-
-
alter table ... modify ttl ...
alter table ... materialize ttl -
alter table ... modify ttl + INTERVAL 1 MONTH
alter table ... materialize ttl
Верно? -
-
Спасибо
-
Мои колонки
event_datetime DateTime,
event_date Date,
server_name LowCardinality(String),
remote_user String,
http_x_real_ip UInt32,
remote_addr UInt32,
status UInt16,
scheme LowCardinality(String),
request_method LowCardinality(String),
request_uri String,
request_args String,
server_protocol LowCardinality(String),
body_bytes_sent UInt64,
request_bytes UInt64,
http_referer String,
http_user_agent LowCardinality(String),
request_time Float32,
upstream_response_time Array(Float32),
hostname LowCardinality(String),
host LowCardinality(String),
upstream_addr LowCardinality(String)
)
ENGINE = MergeTree()
PARTITION BY toMonday(event_date)
ORDER BY (hostname, request_uri, event_date)
Значит event_datetime или event_date? -
да
-
А какая из них?))
event_datetime или event_date? -
-
-
-
Извиняюсь за дурацкие вопросы, но это нормально, что выполнение повисло?
clickhouse-grafana-node-1-centos7 :) alter table access_log modify ttl event_datetime + INTERVAL 1 MONTH;
ALTER TABLE access_log
MODIFY TTL event_datetime + toIntervalMonth(1) -
-
ClickHouse server version 20.7.2.30 (official build).
-
Итого такой
clickhouse-grafana-node-1-centos7 :) alter table access_log modify ttl event_datetime + INTERVAL 1 MONTH;
ALTER TABLE access_log
MODIFY TTL event_datetime + toIntervalMonth(1)
Timeout exceeded while receiving data from server. Waited for 300 seconds, timeout is 300 seconds.
Cancelling query. -
всем привет
подскажите плес, как гарантирован и где закреплен порядок полей таблицы?
вот есть select * from tbl
который возвращает
id, name, surname
можно ли полагаться, что select * возвращает именно такой же порядок полей во всех возможных драйверах/средах/нувыпонели -
select * это запрос, который непредсказуемым образом себя ведет, в том плане что вы меняете схему и он молча начинает выдавать другое. select * в столбцовой базе это еще и подозрительный сценарий, т.к. мы много читаете и ничего не агрегируете. ну и вообще непонятно зачем в named структуре закладываться на порядок
-
то есть если добавить поле birthdate то select * может внезапно начать возвращать
id, birthdate, name, surname ? -
ну, я думаю что раскрытие звездочки как брало из таблицы список стоблцов, так и продолжит это делать, и они там в каком-то порядке, и наиболее очевидный порядок - это порядок из create. поэтому куда добавите, там и будет. проблема на мой взгляд в том, что вы делаете предположение про вещи, которые не контролируете, и становитесь уязвимы к ряду ошибок, которые в других случаях можете избежать. видимо, ради эффективности.
-
КХ гарантирует неизменность, новую колонку можно добавить в любое место (кроме первой?) указав AFTER. alter table x add column Col99 after Col1;
папа прав, никто на * не полагается. -
а таблица Engine=Kafka ваша с kafka_num_consumers = 1 ?
-
например ваша таблица создана как
partition by B order by X
типы B и X значения не имеют
и вы вставляете 4 строки разом
insert into T(B,X) values(1 , 44), (2 , -33), (1 , 16), (2 , 5.6)
такой инсерт создаст в памяти 2 парта, внутри парты будут отсортированы, и после этого записаны на диск
1, 44 1, 16 -orderby--> 1, 16 1, 44
2, -33 2, 5.6 -orderby--> 2, -33 2, 5.6
после записи на диск, парты попадут в список активных, и станут доступны селектам, и вернется управление клиенту (инсерт завершится) -
он удаляет старые записи, все хорошо
ClickHouse release v20.5.2.7-stable 2020-07-02
Apply TTL for old data, after ALTER MODIFY TTL query. This behaviour is controlled by setting materialize_ttl_after_modify, which is enabled by default. #11042 (Anton Popov).
то что отвалилось по таймауту значения никакого не имеет
можно запускать
ALTER TABLE table_for_ttl MODIFY TTL d + INTERVAL 1 YEAR SETTINGS materialize_ttl_after_modify = 0; -
Спасибо за комментарий
-
проверьте что show create table .....
показывает новый create table c TTL -
Всё отлично
SHOW CREATE TABLE nginx.access_log
┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE nginx.access_log
(
`event_datetime` DateTime,
`event_date` Date,
`server_name` LowCardinality(String),
`remote_user` String,
`http_x_real_ip` UInt32,
`remote_addr` UInt32,
`status` UInt16,
`scheme` LowCardinality(String),
`request_method` LowCardinality(String),
`request_uri` String,
`request_args` String,
`server_protocol` LowCardinality(String),
`body_bytes_sent` UInt64,
`request_bytes` UInt64,
`http_referer` String,
`http_user_agent` LowCardinality(String),
`request_time` Float32,
`upstream_response_time` Array(Float32),
`hostname` LowCardinality(String),
`host` LowCardinality(String),
`upstream_addr` LowCardinality(String)
)
ENGINE = MergeTree()
PARTITION BY toMonday(event_date)
ORDER BY (hostname, request_uri, event_date)
TTL event_datetime + toIntervalMonth(1)
SETTINGS index_granularity = 8192 │ -
-
Привет, а может кто-то подсказать, куда смотреть, как кх сериализует бинарные данные, передаваемые на клиента?
-
Native Interface (TCP) | ClickHouse Documentation
Native Interface (TCP) The native protocol is used in the command-line client, for inter-server communication during dis
-
Перфект, большое спасибо
-
коллеги, подскажите, есть materialized view:
CREATE MATERIALIZED VIEW bi.a TO bi.b AS SELECT ... FROM (SELECT ... FROM bi.kafka_stream)
я хочу выставить TTL на таблицу, для удаления старых данных, достаточно ли выставить его только на bi.b или на materialized view - bi.a его тоже надо выставлять? -
-
-
Нет, я устанавливал kafka_num_consumers = 3
-
посмотрите тут https://youtu.be/1LVJ_WcLgF8?t=7503
я за один час постарался ответить кратенько -
эээ, так вы видимо совсем не поняли что этот параметр делает.
если kafka_num_consumers=3 тогда партиций надо минимум 2*2*3=12, рекомендую 24 -
kafka_num_consumers это сколько консьмеров запустить на одной ноде
-
первая нода сожрет 3 партиции, еще одна еще 3, и так далее
-
Спасибо
-
Ааа)) спасибо!))
-
здравствуйте. нужна помощь. при выполнении запроса вида
INSERT ...
SELECT ...
FROM remote()запрос падает с ошибкой
Received exception from server (version 20.5.5):
Code: 241. DB::Exception: Received from processing-host:9000. DB::Exception: Received from remote-host:9000.
DB::Exception: Memory limit (total) exceeded: would use 104.31 GiB (attempt to allocate chunk of 4457360 bytes), maximum: 104.31 GiB:
(while reading column value): (while reading from part /var/lib/clickhouse/data/default/remote_table/20200802-1_0_28670_8/ from mark 24792 with max_rows_to_read = 32768): While executing MergeTreeThread.в какую сторону копать? до этого аналогичный запрос выполнился. в SELECT - простая выборка полей плюс фильтр по ключу партиционирования. -
странно, ни order by ни group by ?
set max_threads=1, max_insert_block_size=100000 -
да, ни ORDER BY, ни GROUP BY.
спасибо, попробую max_threads, а то пока только до max_insert_threads=1 дошел, без него принимающая сторона валится -
-
типа (log_2[^$]) (не проверял)
- 04 October 2020 (83 messages)
-
-
Нал 0
-
/stat@combot
-
-
Привет всем!
У бизнеса возникла идея скрестить бигдату, кх и splunk. Пока вопросы к последнему пункту. Может ли кто по splunk проконсультировать? За денежку, конечно.
Там что-то очень много маркетингом обмазано - загружаешь неструктурированный треш, а на выходе конфетка. Не верю :) -
Joined.
-
-
Никто случайно в обозримом прошлом кластер КХ на bare metal не поднимал? Интересуют параметры. Точных данных по предполагаемой нагрузке пока нету, для справки железо хочется оценить. С шардированием
-
нет но можно руками проставить в нужном порядке вроде
-
просто КХ сам в бекграунде то же самое делает
-
Ну мы просто видели что порядок вещей в запросе может интерпетироваться очень по разному с точки зрения execution plan и хотелось бы понять если мы может контролировать порядок выполнения sub queries.
-
На данный момент, сначала выполняется самый внутренний запрос.
-
Вопрос еще один очень интересный вопреки рекомендациями не использовать CH для хренения текстовых документов я все равно не могу объяснить этот эффект ?
SELECT internal_id
FROM articles
WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a'
┌─internal_id──────────────────────────────┐
│ 6f58fa93be8424153cc0a4e27a42dc8649d98a1a │
└──────────────────────────────────────────┘
1 rows in set. Elapsed: 0.108 sec. Processed 3.27 million rows, 151.11 MB (30.39 million rows/s., 1.40 GB/s.)
clickhouse-db-03.dmetrics.internal 🙂 SELECT internal_id,content
:-] FROM articles where internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a';
SELECT
internal_id,
content
FROM articles
WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a'
┌─internal_id──────────────────────────────┬─content────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 6f58fa93be8424153cc0a4e27a42dc8649d98a1a │ One selling point for Harris, is that her experience with cyber crimes could give her a leg up as someone qualified to protect our cyber security from hostile nations.Even if you accept the idiotic idea that Trump didn't collude with Putin, the nicest thing you can say about Trump is that he has failed to take any action to protect our elections , our power grid, nuclear power plants etc etc. In other words, he is either an agent of Putin, or a sniveling coward. There is a government report that states that China and Russia have the capabilities to shut down our power grid and interupt our gas suplly lines. Imagine if they had done this during this current freeze. Thousands would have died │
└──────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
1 rows in set. Elapsed: 10.399 sec. Processed 3.27 million rows, 14.89 GB (314.48 thousand rows/s., 1.43 GB/s.)
Первый запрос по индексу берет 100 мс а тот же самой запрос который по индексу но и приносит текстовое поле дополнительное отвеает в 100 раз медленее ? Есть ли идеи почему ? -
первый запрос читает только из одной колонки: internal_id
второй запрос читает из двух колонок: internal_id, content
при этом content сильно больше по размеру - это можно увидеть в статистике по запросам:
Processed 3.27 million rows, 151.11 MB против Processed 3.27 million rows, 14.89 GB -
-
^^^
-
Кх по минимуму читает одну гранулу. Т.е. если в ней 1000 строк, он прочтет 1000 гигантских текстов из другой колонки
-
господа. а как вы пишете сиды для тестирования кликхаус кверей?
в в распоряжении кх19.7, нода.
проблема в том, что сейчас сиды у меня прописаны в виде массива массивов.
вида
[
['john', 'doe', 75]
]
отдельно существует объект для маппинга, вида
{
name: 'String',
surname: 'String',
age: 'UInt8'
}
как вы понимаете, там колонок 50 в каждой записи.
так что поддерживать весь этот зоопарк становится накладно, ибо приходится буквально считать запятые, чтобы воткнуть какое-то значение на какое-нибудь место -
-
-
Коллеги, добрый вечер! Изучаю и практикую clickhouse, есть вопрос один.
На данный момент разрабатываю pipline впервые, гружу данные в clickhouse(использую файлы в папке), но clickhouse позволяет загружать дубликаты. Что делать в таком случае?
Сделать архитектуру с помощью которой файлов там не будет?
Это ок, так и будет.
Но вопрос все равно интересный, что насчет дубликатов и уникальности? Кто что делает в таком случае? -
движок поменять на реплесинг
-
ReplacingMergeTree | Документация ClickHouse
ReplacingMergeTree Движок отличается от MergeTree тем, что выполняет удаление дублирующихся записей с одинаковым значени
-
Привет. В Яндекс Облаке есть VM (4GB RAM) и Managed ClickHouse (Гарантированная доля vCPU 5%, 2 ГБ RAM - кластер для тестирования). Хочу в табличку clickhouse загрузить данные из CSV (2.2M строк ~1.5GB размер файла):
clickhouse-client --host xxx.mdb.yandexcloud.net --secure --user xxx --database xxx --port 9440 --password="xxx" --format_csv_delimiter=";" --format_csv_allow_double_quotes=0 --format_csv_allow_single_quotes=1 --query="INSERT INTO reports FORMAT CSV" < 2018.csv
Code: 210. DB::NetException: I/O error: Broken pipe, while writing to socket (x.x.x.x:9440)
У меня не хватает ресурсов на VM/ClickHouse? как диагностировать проблему?
Копирование такого-же файла в кластер такой же мощности для postgresql - было успешным (но с ноутбука, не с VM) -
Но тама есть особенность, дубли сразу не уйдут, а может и совсем не уйдут.
-
хмм
-
решение есть на эту особенность?
-
-
-
Вручную делать OPTIMIZE, но это как я понимаю не рекомендуется часто делать. Если дублей мало я бы забил и на этапе select это решал просто.
-
Но это я. Вам такое может не подойти.
-
-
Processed 3.27 million rows -- по индексу? Что ?
ну и сто раз тут уже показывали как сделать подзапрос который вернет PK и потом по PK выберет -
храним в выделенных колонках в КХ или в "json" в монге
-
удаляем дубликаты до КХ кассандрой, сам КХ не может смержить, не хватает скорости дисков
-
интересно, спасибо за инфу
-
т.е. у кх все хорошо, например есть 5 партов в месяц размером по 200ГБ, если пытаться мержить в один парт чтобы удалить дубликаты, диски задыхаются и селекты не выполняются, ну такой мерж параллельно с инсертами идет несколько дней
-
хмм, понял
-
уже перегнал всю эту дрянь в json. стало гораздо менее противно работать с данными.
новая повестка дня - словари 😄
где вы их храните? тоже в монге ? -
у меня все словари http, без понятия что там за http, вроде mysql
-
то есть локально даже для тестов не держите ?
-
для тестов в файлах, tsv, т.е. бекэнд словарей возвращает tsv через http, поэтому для тестов легче всего просто курлом в файл сложить
-
какая версия кх? похоже OOM killer убивает КХ. Ну и конечно КХ не рассчитан на 2ГБ, надо специально настраивать. КХ из коробки рассчитан на 64ГБ+
-
в какой-то момент ваша колонка с json станет размером 200ГБ, любые запросы будут работать 200+ сек.
-
понял, спасибо =)
-
честно говоря, тестиков пока мало, и много вроде не предвидится.
но то, что было до этого, было невероятно отвратительно -
попробуйте представить, как клево менять данные при таком раскладе :D
-
просто не надо рассчитывать что КХ будет работать с неструктурированными данными, ну не будет он, будет просто тормозить, потому что просто прочитать с диска такую суперколонку невыносимо долго, потом распаковать, потом отфильтровать.
-
менять????? возьмите монгу. КХ тут не подходит.
-
а, нене, вы меня не так поняли)
я вынес сиды с пика выше в отдельный json файл
так что в кликхаусе они все складываются как нужно, по колонкам
а жаловался я на то, что json по размеру получается в разы больше, чем аналогичный csv (или около того, как на пике выше, опять же) -
я не знаю что такое "сид", "пик"
-
seed - это некоторые данные для тестовой базы.
грубо говоря чтобы проверить select * from tbl нужно сперва эту tbl чем- то заполнить.
вот сиды - как раз такие вот дерьмовые данные для тестов.
а пик - пикча, картинка выше крч -
Народ вопрос, в одном запросе можно к одной и той же таблице делать подзапросы? И на сколько это будет быстро?
-
Ну те допустим одновременно мне нужна сумма нескольких колонок как результат и поделить ее на третью и отдать как результат этого же запроса
-
Как я знаю, вроде такое можно делать и я работал с этим, но сами запросы не писал.
группируешь и запрашиваешь -
-
Не, просто мне предъявляют за 12 подзапросов из одной таблицы, но я вариантов как это сделать менее экстремально не придумал.
-
-
по скорости пока ничего сказать не могу
-
-
можете 100 делать, не вижу проблемы... если надо то надо
-
Спасибо,
-
Я понимаю, интересно с точки зрения производительности
-
ну мы новинькие только в начале пути можете направить о чем речь ?
-
ну таблица будет сканироваться много раз
-
Никаких оптимизаций не придумали для этого?
-
писать правильные запросы
-
Да это то понятно
-
дайте пример базы в которой это "придумали". Чтобы было от чего плясать
-
1. у вас не работает индекс.
SELECT internal_id
FROM articles
WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a'
должет возвращать малое кол-во прочитанных строк
проверьте ДДЛ таблицы
2. после того как почините индекс, должно быть быстро. -
если по индексу то processed rows будут тысячи а не миллионы
show create table в студию -
из вашего описания звучит как очень тупое решение
(a+b)/c , понятно что вы хотели чего то типа sum(a+b) / c -- это можно сделать через массивы, все зависит от кол-ва данных с таблице -
select tot, tot/(arrayJoin(ca) as c), c from (select sum(a+b) tot, groupArray(c) ca from (select number a, number b, number c from numbers(10)))
┌─tot─┬─divide(tot, arrayJoin(ca))─┬─c─┐
│ 90 │ inf │ 0 │
│ 90 │ 90 │ 1 │
│ 90 │ 45 │ 2 │
│ 90 │ 30 │ 3 │
│ 90 │ 22.5 │ 4 │
│ 90 │ 18 │ 5 │
│ 90 │ 15 │ 6 │
│ 90 │ 12.857142857142858 │ 7 │
│ 90 │ 11.25 │ 8 │
│ 90 │ 10 │ 9 │
└─────┴────────────────────────────┴───┘ -
CREATE TABLE fgi.articles_data
(
internal_id String,
timestamp Nullable(DateTime('UTC')),
content String,
url Nullable(String),
data_provider String,
document_length UInt32,
domain_name String,
is_near_duplicate UInt8,
publish_date DateTime('UTC'),
tags.name Array(String),
tags.score Array(Float64),
tags.tagger Array(String)
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/replicated/fgi/articles_data', 'srv1.internal')
PARTITION BY toYYYYMMDD(publish_date)
ORDER BY internal_id
SETTINGS index_granularity = 8192 -
-
Спасибо
-
если бы индекс не работал то 100 мс не было было для internal_id
-
ясно
PARTITION BY toYYYYMMDD(publish_date)
ORDER BY internal_id
SETTINGS index_granularity = 8192
т.е. каждый парт в каждом шарде дает 8129 (или 16384) строк., чтобы получить Processed 3.27 million rows надо иметь 199 партов, т.е. конечно это можно все поправить, и партиционирование шардирование, и т.д.
наверное вам придется делать два запроса
select publish_date, internal_id
FROM articles
WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a'
SELECT
internal_id,
content
FROM articles
WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a' and publish_date = ....
одним запросом вроде прунинг сделать не получится
а да, еще можно попробовать PREWHERE вместо WHERE -
было бы, колонка сжатая... маленькая. из кеша норм.
-
спасибо за направление посмотрим что делать
-
-
вроде консалтинг только altinity.com, больше никого.
-
- 05 October 2020 (238 messages)
-
-
Joined.
-
Joined.
-
Спасибо за помощь настройкой clickhouse-server!
-
Всем привет!
Подскажите пожалуйста если мы работаем с массивом кортежей вида [(a,b,c), (d,e,f)] при этом кортежи созданы для каждого id можно ли сделать следующее:
1. вытащить из множества кортежей на id тот, который нас интересует (например a,b,c)
2. уникально посчитать uniq(id) на каждый кортеж так, чтобы в случае если на id есть 2 кортежа по которым мы считаем уников, id посчитался только в один из них.
В общем можно ли задать как-то приоритет кортежу, если нашелся (a,b,c), то остальные чтобы не считались, или это уже в питоне такое лучше обрабатывать? -
Здравия!
У меня есть кликхаус кластер, который настраивается ансиблом. Он в продакшене сейчас
Хочу сделать так, чтобы ансибл настраивал хосты по одному и проверял состояние кликхауса, ну то есть, чтобы всё не развалилось
И у меня вопрос - как лучше всего проверять состояние кликхауса? Можно дёргать по http пинг, но там же он проверяет что инстанс кликхауса рабочий. А в идеале проверять ещё что и кластер не развалился. Так возможно? -
привет. а кто мешает выполнять clickhouse-client с нужным запросом?
-
Похоже, осознал
Мы же можем сделать запрос в системную таблицу и из неё вытащить значение?
Покопаю в эту сторону -
угу
-
Благодарю!
-
Скажите, а clickhouse-proxy умеет bulk insert'ы делать со всякими параметрами в стиле --ignore-error?
-
Joined.
-
Всем привет, никто не сталкивался со следующей проблемой:
Пытаюсь через DBeaver выполнить запрос из доки по объединению массивов:
SELECT arrayZip(['a', 'b', 'c'], [5, 2, 1])
DBeaver пишет ошибку - org.jkiss.dbeaver.model.exec.DBCException: Can't extract array data from JDBC array
Версия драйвера 0.2.4, версия кх - 20.9.2 -
привет, я сталкивалась, попробуй в строку перевести если надо посмотреть что получилось
-
спасибо!
-
-
Дык старый добрый ansible в помощь
-
-
Joined.
-
так же как с таблицами:
"[ON CLUSTER cluster_name]" -
-
-
Всем привет!
Ребята, подскажите пожалуйста.
захожу clickhouse-client на ЛОКАЛЬНЫЙ сервер, выполняю запрос:
alter table table_name delete where...
получаю ошибку:
Code: 999. DB::Exception: Received from localhost:9000. DB::Exception: Connection loss
КХ последней версии - 20.9.2
Из-за чего? Что посмотреть? Что подкрутить?
В Списке мутаций этот запрос соответственно не появляется -
Подскажите пожалуйста после установки последней стабильной (v20.9.2.20-stable) на Fedora 32( 5.8.12-200.fc32.x86_64) при попытке запустить клиента пишет что "ClickHouse client version 20.9.2.20 (official build).
Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000)"
Выводы "lsof -i :8123" и "lsof -i :9000" пусты.
Вывод "systemctl status clickhouse-server" такой с ошибками:
"● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; disabled; vendor preset: disabl>
Active: activating (auto-restart) (Result: exit-code) since Mon 2020-10-05 12:13:41 MSK; 12s a>
Process: 1004 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml ->
Main PID: 1004 (code=exited, status=217/USER)
CPU: 2ms
окт 05 12:13:41 rpk-db-server systemd[1004]: clickhouse-server.service: Failed at step USER spawnin>
окт 05 12:13:41 rpk-db-server systemd[1]: clickhouse-server.service: Main process exited, code=exit>
окт 05 12:13:41 rpk-db-server systemd[1]: clickhouse-server.service: Failed with result 'exit-code'.
"
Как пофиксить ? -
Всем привет! Кто-нибудь сталкивался со странным поведением rangeHashed-справочников ? dictGet в запросе возвращает по ключу пустое значение при 100% наличии ключа. system reload не помог
-
Тоже бы послушал ответ об денормализации. Судя по всему, джойнить по конкретным строкам (в стиле UUID соединяющий записи в разных таблицах) вряд ли получится, возможно если в твоём случае есть вариант уже по групированным данным джойнить то может работать. Простыми словами если оба селекта в джойне возвращают десятки миллионов строк - не получится
-
ну или получится но очень медленно, хотя для дневных репортов сойдёт.
-
привет, подскажите пожалуйста такой момент, правильно ли я понимаю что select данных по партиции делается просто указав в where нужный expr (который использовался при создании таблицы …PARTITION BY expr)? поддержки чего-то подобного нет судя по докам? select * from visits_{partition}
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/custom-partitioning-keyПроизвольный ключ партиционирования | Документация ClickHouseПроизвольный ключ партиционирования Партиционирование данных доступно для таблиц семейства MergeTree (включая реплициров
-
В кх партиции это часть таблицы, а не отдельные таблицы как в некоторых субд
-
ок, принял
-
Кто нибудь встречал обёртки над clickhouse-client и clickhouse-local для Python/Java/Go ? Не tcp + native, а именно обёртки через pybind11/jni/panama и т.д.
-
clickpanda если Вы об этом для питон
-
Привет,
select * from
(select 1 key, now() as created) a
right join
(select 1 key, 2 value, today() as created) b
on a.key = b.key
and toDate(a.created) = b.created
Такой запрос вроде должен работать но он не видит колонку (a.created).
Это можно как-то обойти? -
Попробуйте убрать из верхнего SELECT-а символ *
-
select a.key, b.key, b.value from
(select 1 key, now() as created) a
right join
(select 1 key, 2 value, today() as created) b
on a.key = b.key
and toDate(a.created) = b.created
та же проблема -
a.*, b.*
а так? -
всё то же:
Not found column toDate(created) in block. There are only columns: key, created (version 19.9.5.36 (official build)) -
так?
select * from
(select 1 key, toDate(now()) as created) a
right join
(select 1 key, 2 value, today() as created) b
on a.key = b.key
and a.created = b.created -
Заработало.
Спасибо) -
у меня и ваш оригинальный запрос работает. версию свою посмотрите, может состарилась
-
(version 19.9.5.36 (official build))
а ну да, это очень давно и неправда -
-
-
А сколько места занимает поле String если не указывать FixedString? Столько сколько значение занимает + int64 для указателя на это значение?
-
замютите чат, когда приходят встречи они пиннятся, и вам придет уведомление
-
должна быть запись на ютубе
-
-
Добрый день!
Подскажите пжл , удалять элементы лучше через partition by? -
Никто на Fedora 32 не ставил ?
-
что подразумевается под элементами?
Для эпизодической очистки записей есть ALTER TABLE DELETE -
Мне сказали, что ALTER TABLE DELETE удаляет данные только окгда ему это удобно, а не сразу
-
Не совсем, он запускает мутацию она выполняется в фоне, но ты можешь поставить настройку, которая будет ждать окончания выполнения запроса
-
Под элементами подразумеваются строки , которые удовлетворяли бы условиям
-
mutations_sync │ 0 │ 0 │ Wait for synchronous execution of ALTER TABLE UPDATE/DELETE queries (mutations). 0 - execute asynchronously. 1 - wait current server. 2 - wait all replicas if they exist.
SET mutations_sync=1;
если пользуешься clickhouse-client -
нет указателей. занимает размер строки плюс 1 байт (на \0)
(на диске, при условии отсутствия сжатия/кодеков) -
то есть читая эту колонку нужно прочитать весь файл, прыгать внутри он не сможет на определённое место (хотя это может и не надо по задумке кх)
-
нет, нужно прыгать по засечке на нужную гранулу и читать всю гранулу
это норма для колоночных таблиц -
Мутацию?
А где это можно посмотртеь ?
alter table default.default delete where date = '2020-08-09 у меня был такой запрос
немного не понял про. queries wait & 1,2.' -
Понял, спасибо! Единственное где можно почитать о том как он разбивает на гранулы, наверное добавило бы мне понимания как всё работает
-
запросы ALTER TABLE table UPDATE/DELETE в терминологии кх называются мутациями
посмотреть можно в SELECT * FROM system.mutations -
-
Ого! Спасибо большое!!!!!!!
-
Ch только 64 бита. Не собрать 32 битный
-
Не, Fedora у меня 32 версии )
-
скопировать sql /каталог access_rights
-
Если просто запустить исполняемый файл, то работает. А как его настроить чтобы авматом щапускался, служба вроде есть в systemctl глянул, но КХ не слушает порты...
-
или пользователя clickhouse нет или права кривые
-
Кх пишет в лог в stderr
-
Ставил все по мануалу, для rpm пакетов.Там нет создание пользователя...
-
Ну так баги и в пакетировании бывают
-
Ставить лучше с сорцов?
-
есть видео
-
Круто, а есть линк?
-
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Приглашаем на Saint HighLoad ++ 2021 20 и 21 сентября 2021, Санкт-Петербург, DESIGN DISTRICT DAA in SPB Программа, билеты и подробности - https://clck.ru/VmKaW -------- РИТ++ 2017, Backend Conf Тезисы: http://backendconf.ru/2017/abstracts/2803.html ClickHouse - высокопроизводительная аналитическая база данных с открытыми исходниками, разработанная в Яндексе. Изначально ClickHouse создавался для задач Яндекс.Метрики, но постепенно нашёл множество применений как внутри Яндекса, так и в других компаниях. Я расскажу, как ClickHouse устроен внутри с акцентом на то, какие у выбранной архитектуры следствия с точки зрения прикладного разработчика. Будут затронуты следующие темы: - Как ClickHouse хранит данные на диске и выполняет запрос, почему такой способ хранения позволяет на несколько порядков ускорить аналитические запросы, но плохо подходит для OLTP и key-value нагрузки. - Как устроена репликация и шардирование, как добиться линейного масштабирования и что делать с eventual consistency. - Как диагностировать…
-
Спасибо
-
Да при чем тут это. Какой-нибудь chown нужно выполнить. Проверяйте ошибки в /var/log/clickhouse
-
https://habr.com/ru/post/509540/ текстовый вариантЧто нужно знать об архитектуре ClickHouse, чтобы его эффективно использовать. Алексей Зателепин (2018г)
ClickHouse — высокопроизводительная аналитическая база данных с открытыми исходниками, разработанная в Яндексе. Изначально ClickHouse создавался для задач Яндекс.Метрики, но постепенно нашёл...
-
Статус демона КХ стоит в activating, значит не может запуститься, что то мешает
-
/var/log/clickhouse
-
В файле clickhouse-server.err вижу такое:
2020.10.05 14:26:27.039704 [ 1516 ] {} <Warning> Access(local directory): File /var/lib/clickhouse/access/users.list doesn't exist
2020.10.05 14:26:27.039762 [ 1516 ] {} <Warning> Access(local directory): Recovering lists in directory /var/lib/clickhouse/access/ -
Что говорит id clickhouse
-
Такого пользователя нет
-
переустановите пакет и снова проверьте, может появится
-
А как вы проверяте? в словарь можно select сделать и увидеть как таблицу
-
разобрался. обращался к distributed-таблице, а словарь обновился не на всех нодах. system reload on cluster помог.
-
При установке выдается такое:
Synchronizing state of clickhouse-server.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable clickhouse-server
Failed to execute /usr/lib/systemd/systemd-sysv-install: Нет такого файла или каталога
предупреждение: %post(clickhouse-server-20.9.2.20-2.noarch) scriptlet failed, exit status 1
Error in POSTIN scriptlet in rpm package clickhouse-server -
сделайте багрепорт на гитхабе
-
В /etc/systemd/system/clickhouse-server.service какой пользователь указан? Он создан в системе? Вывод systemd намекает что он не может стартануть от имени указанного юзера
-
[Unit]
Description=ClickHouse Server (analytic DBMS for big data)
Requires=network-online.target
After=network-online.target
[Service]
Type=simple
User=clickhouse
Group=clickhouse
Restart=always
RestartSec=30
RuntimeDirectory=clickhouse-server
ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid
LimitCORE=infinity
LimitNOFILE=500000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_IPC_LOCK CAP_SYS_NICE
[Install]
WantedBy=multi-user.target -
а id clickhouse что говорит?
-
Такого пользователя нет
-
Поэтому и не стартует. Нужно его создать
-
И группу надо? а Какие права и куда надо дать ?
-
Ребят, можете сказать :
alter delete table - запускает удаление на бэке ?
если стоит задача мгновенного удаления, стоит использовать partition by?
или есть какие-то другие эффективные методы удаления -
У меня вот так создаётся, создать и попробовать стартануть.
useradd -d /var/lib/clickhouse -U --shell /sbin/nologin clickhouse -
добрый день,
возможно ли в кликхаусе сделать такую схему, когда в кластере 4 ноды, все имеют sdd диски, и только две имеют hdd. Hot data былабы на всех нодах в ssd, а cold data только на двуь, на одной ноде в каждом шарде на hdd? Cold data - это данные старше установленного ТТЛ'а, и то, что они былибы только на одной реплике, в принципе, не проблема для нашего кейса. -
Alter table drop partition удаляет все строки партиции. Если вы об этом
-
Обобщённее скажу
Мне нужно будет удалять все строчки за определённую дату у определённых приложений
т.е мне нужно будет уметь быстро удалять запси по приложениям и дате
Через что это можно сделать ? -
нет такого нет.
Можно переатачивать партиции в другую таблицу, а из первой удалять. -
ни через что. Нету такого в КХ.
-
Как можно решить данную проблему ?
Создавать для каждого приложения отдельную таблицу? -
сколько приложений у вас? Сколько таблиц будет?
-
5-20
-
понял. Спасибо
-
по каждому приложению 2 таблицы
-
2-3
-
можно тогда partition by (application, toYYYYMMDD() ) -- это будет тоже самое что отдельные таблицы
и потом alter table drop partition ('my_app', 20201010) -
А по времени оно будет быстро отрабатывать ?
-
+- так же , как если бы я создал отдельные тблицы для каждого приложения?
-
почти всегда да.
и в итоге конечно вы потрахаетесь прилично пару недель и возьмете postgresql. -
почему его ?
-
а почему нет?
-
будут другие проблемы , помимо задержки в удалении?
-
Ну, у меня есть сейчас и постгри и кликхаус
хранить большие данные лучше в кликхаусе , не помниаю , почему перейду в постгри -
нафига вы взяли КХ, в нем данные иммьютабл.
-
хранить лучше в кликхаузе. Удалять в клике постоянно - боль
-
хранить? КХ аналитическая субд, она для group by запросов
-
хранить надо в текстовых файлах
-
не понял
данные неизменимы ?
Если я правильно понял, я не использую никаких update, я именно удаляю и загружаю те же обновлённые данные в БД. -
>я именно удаляю и загружаю те же обновлённые данные в БД.
дак вот не поддерживает КХ такой паттерн. Не предназначен. Нету такого в клик-стриме -
окей
а почему ?
есть метод insert,есть alter/drop partition почему этим нельзя пользоваться на постоянке ? -
потому drop partition не гарантирует удаление записей на выключенных в этот момент репликах и потому что drop partition может бесконечно долго работать ожидая конца мержа. И потому что слишком мелкое партиционирование (partition by application) прямой путь к пиздецу (прошу прощения за фр., других слов подходящих в лексиконе нету)
-
все команды alter table в общем-то для выполнения "вручную" под наблюдением человека, их нельзя использовать в ежедневных бизнес-процессах.
-
Centos/8: sysV vs systemd mess. Service status is 'stopped' although it is running · Issue #14298 · ClickHouse/ClickHouse
Description Whenever I run sudo service clickhouse-server status I get clickhouse-server service is stopped, although the server is actually running. I can verify that it is running with the follow...
-
А о каких репликах речь ?
Про бесконечный мерж, вроде, понял
на счёт партицирования (по дате ,приложению) , так не будет лучше ? -
ну конечно нет. facepalm.jpg
-
хорошо, буду знать, спасибо
-
>на счёт партицирования (по дате ,приложению)
(по дате ,приложению)
(приложению, по дате)
это одно и тоже. -
>А о каких репликах речь ?
o таблицах Replicated -
Подскажите как вставить в AggregatingMergeTree таблицу данные которые уже агрегированы. Ошибка вида
Conversion from UInt64 to AggregateFunction(count, UInt64) is not supported:
Пробовал arrayReduce('countState',value)-но в столбце value уже посчитанное число-соответственно arrayReduce('countState',value) выдает 1 для 1 значения в столбце а нужно содержащееся там UInt64 -
initializeAggregation
https://github.com/PerformanceVision/ClickHouse/blob/569a89280cdc5818aae9a6bb5fd9fe753769814d/tests/queries/0_stateless/01356_initialize_aggregation.sql
Во вторых вы зря вообще используете AggregateFunction(count -- это неправильно. Вам нужна SimpleAggregate(sum, UInt64) -- это намного быстрее, проще в использовании и занимает меньше места на диске и особенно в памяти. -
спасибо, пробую
-
упс initializeAggregation для count тоже как arrayReduce 1-ку выдает. Печаль.
-
-
-
в общем-то countState в любом случае ненужная хрень, обычно используют sumState или просто sum (sumState тоже не нужен, там нет State).
-
-
AggregatingMergeTree -- уже существует или он новый?
-
-
-
ну так не надо это все вообще.
просто AggregatingMergeTree c SimpleAggregateFunction -
-
SimpleAggregateFunction -- обычные simple значения , без state, и не нужно Merge делать, просто sum( ) (похоже на SummingMT)
-
т.е. отличается только в том что хранится не в бинарном виде а в типе столбца?
-
Привет. CH из yandex/clickhouse-server:20.1.11.73, кластер из четырех нод:
node layer shard replica
-----------------------------
A 01 01 01
B 01 01 02
C 01 02 01
D 01 02 02
Создаю на всех нодах таблицу
CREATE TABLE DBName.TableName (`Foo` String, `Bar` UInt64 DEFAULT CAST(now(), 'UInt64')) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/DBName.TableName', '{replica}') PARTITION BY (toYYYYMM(toDateTime(Bar / 1000, 'UTC')), Event) ORDER BY (Foo, Bar) SETTINGS index_granularity = 8192
и наполняю ее данными.
Хочу проверить холодный старт, штатно останавливаю CH и при попытке запустить его снова, ноды A, B и C встают, а D жалуется
<Error> Application: DB::Exception: The local set of parts of table DBName.TableName doesn't look like the set of parts in ZooKeeper: 3.47 million rows of 3.47 million total rows in filesystem are suspicious
Окей, дропаю DBName.TableName и пытаюсь force_restore_data, на что получаю
<Error> Application: DB::Exception: Duplicate interserver IO endpoint: DataPartsExchange:/clickhouse/tables/01-02/DBName.TableName/replicas/02
При этом в зукипере никакого дублирования там нет, вся информация корректна.
Дропаю полностью DBName.TableName, пересоздаю-наполняю по новой - результат тот же самый.
Складывается подозрение, что где-то криво сконфигурирован раздел <macros>, но нет - везде правильно.
Раньше не пользовались layer'ами и такой проблемы не возникало. Нет ли каких известных подобных проблем с ними?
Так же стоит отметить, что TCP-порт на всех нодах не 9000 (на уровне docker проброс) и в он <remote_servers> он указывается правильный, однако в ZK в /clickhouse/tables/01-02/DBName.TableName/replicas/02/host все равно tcp_port: 9000, хотя а А-B это не мешает, возможно правильный порт стоит указать в конфиге где-то еще? -
и данные получаеся после внесения не доаггрегируется?
-
*State -- это какое-то значение + state, типа для avgState там (sum,cnt)
для sumState там хранится (sum, 0)
для countState хранится (count,0)
для minState(min,0)
т.е. State бессмысленны для многих функций и замедляют КХ, поэтому были дописаны SimpleAggregate -
что? конечно все просуммируется в мержах
-
Joined.
-
Спасибо, получилось то что нужно👍🏻
-
скорее всего проблема в макрос select * from system.macros на всех 4, layer ни при чем, он кстати нужен если у вас огромный кластер с сотнями нод, чтобы делать sub-кластеры.
еще надо проверить что все зукиперы в одном ансамбле, а не standalone
>Duplicate interserver IO endpoint
это про hostname -f (interserver_http_host)
кстати репликация работает через порт 9009 -
Коллеги, подскажите куда копать в случае ошибки?
Code: 234, e.displayText() = DB::Exception: No active replica has part 20201004_92_92_0 or covering part (version 19.15.2.2 (official build))
Помогло, но временно, удаление znode is_active для этой (сбойной) реплики и создание znode для ругой реплики (из таблицы/поля replication_queue/source_replica ). Но после загрузки данных в таблицу опять эта же ошибка. -
Some merges may stuck · Issue #10368 · ClickHouse/ClickHouse
This bug is discovered on Yandex.Metrica servers. If there is assigned merge but some parts in between of the range of parts to merge get lost on all replicas, the merge cannot proceed and the foll...
-
>No active replica has part 20201004_92_92_0
это не ошибка, это просто следствие перезагрузки железа -
Нашел проблему, существовала таблица Test.TableName, которая в метадате определялась как ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/DBName.TableName', '{replica}') , отсюда Duplicate interserver IO endpoint и возникала.
Про 9009 порт знал, просто смутило что в ЗК указывается 9000, когда в remote_servers написано другое, но работе это не мешало.
Спасибо что уделили время -
очень важно понять что remote_servers не имеет отношения к репликации.
Движок Replicated не использует remote_servers.
remote_servers нужен только движку Distributed -
это понятно, но почему-то чинится только на неизменяемое состояние. Очевидно, replication queue очищается после пересоздания znode is_active, но проблема остается.
-
я не понимаю что вы сделали, особенно меня смущает "создание znode для ругой реплики"
-
Принял, почитаю/поковыряю внимательнее, еще раз спасибо
-
Joined.
-
Joined.
-
привет! а есть ли какой-нибудь нибудь способ реализации табличной функции (интересует в частности outer apply) в clickhouse? нужно для каждой строки с ключом [mac , timestamp] вернуть набор значений метрики для этого mac внутри окна [timestamp - заданный интервал, timestamp]
-
с помощью массивов и groupArray
-
прошу прощения за слоупока, но как должно быть?
-
тега <password> не должно быть вообще?
-
???? там речь про сетевые ограничения была, про "фаервол" в КХ
-
так вопрос в том, как сформировать этот массив, т.к.
1. timestamp не уникален, т.е границы окна start date - end date у строк разные
2. mac не обязательно имеет все заполненные timestamp, т.е. взять просто последние 24 значения тоже нельзя, потому что не факт, что это будут данные за 24 часа -
Я вижу ваш вопрос так
Есть у нас куча массивов.
Один массив -- один mac
Внутри массива туплы (timestamp, value)
Отсортировано по убыванию timestamp
Ну разбивайте этот массив на подмассивы как хотите, например по 100 значений, или по значениям timestamp, или по value
И считайте внутри подмассивов. -
спасибо!
-
-
-
адаптивная гранулярность включена по умолчанию
base64 - это уже стринг. еси это base64 от 8byte, можно в uint64 -
можно по любому выражению строить индекс, но польза может быть сомнительна
-
Понял, в таком случае настройку index_granularity_bytes нужно увеличивать или как? я не совсем понимаю. Она в дефолте 10 мб.
-
enable_mixed_granularity_parts надо включить
-
можно увеличить/уменьшить, смотря чего вы добиваетесь
-
конечно же уменьшение выполнения времени запроса =)
-
ок, добавьте процессоров и увеличьте скорость дисков =)
-
само собой, мне было интересно до какого момента можно выкручивать index_granularity_bytes. Дефолтное значение , думаю, явно не подойдет.
-
не подойдет потому что гладиолус. да =)
-
понял, тогда для начала включу enable_mixed_granularity_parts , а там видно будет.
-
enable_mixed_granularity_parts - это чтобы старые неадаптивные с новыми работали.
у вас скорее всего все адаптивные, можно не трогать.
если не устраивает количество строк в гранулах (чаще лукап по индексу) - уменьшайте index_granularity_bytes.
если переусердствуете - будут просто тормоза на range сканах индекса ну и индекс будет много весить в памяти -
Я что-то не понимаю - если размер уменьшить, то и количество строк в них будет помещаться меньше
-
How understand the granularity and block in ClickHouse?
I am not clear about these two words. Whether does one block have a fixed number of rows? Whether is one block the minimum unit to read from disk? Whether are different blocks stored in different ...
-
-
Всем привет! Подскажите, пожалуйста, какую настройку покрутить, чтобы увеличить блоки вставки через INSERT SELECT (для MergeTree)? А то плодится куча маленьких партов. Увеличение max_block_size не помогло
-
Может неправильно партиционирование сделали? Стандартно КХ делает помесячные партиции
-
max_insert_block_size - чем выше тем меньше партов
min_insert_block_size_rows - чем выше тем меньше партов
min_insert_block_size_bytes - чем выше тем меньше партов
max_insert_threads - чем выше тем больше партов -
Ясно спасибо
-
вот пример https://gist.github.com/den-crane/21a84a9a8a9e5203195a7f023a0ec363
100млн. один парт -
Хм, в доке было, что эти настройки бессмысленные при insert select..
-
Спасибище!
-
где о_О?
-
где ? давайте поправим
-
Тут https://clickhouse.tech/docs/ru/operations/settings/settings/
Про max_insert_block_size
"При использовании INSERT SELECT, настройка так же не имеет смысла, так как данные будут вставляться теми блоками, которые вышли после SELECT-а."Настройки | Документация ClickHouseНастройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
да, надо поточнее наверное описать, но опять же всю правду написать не получится, все еще зависит от движка из которого читаем. Полное описание займет 8 страниц.
-
Если есть трафик на одну таблицу с разными гео , сайтами форматами, действиями
Куда и как это лучше оформить ..
sid - сайтов
tid - форматами
country - 10 стран например
do - see , click, close
Чтобы дальше это как то мержить с таблицы типа MergeeTree
сейчас country типа = RU BY
sid - числа
tid - числа
do - text
Как то нужно агрегацию сделать .. но оно вроде только по числам работать будет ..
Чего делать? )) -
Ребят, select с groupArrayArray и Group by прекрасно работает в тестовом окружении 8 ядер и валится на нехватке озу на тех же данных , но в проде на 48 ядрах.
опытным путем установили, что aggregation_memory_efficient_merge_threads=8 норм, а выше уже плохо.
Вопрос - можно ли сделать так, чтобы не думать об этом параметре? -
e.displayText() = DB::Exception: Memory limit (for query) exc
eeded: would use 110.00 GiB (attempt to allocate chunk of 4234432 bytes), maximum: 110.00 GiB: While executing SourceFromNativeStream (version 20.8.3.18 -
установить его в конфиг?
-
в каком смысле агрегация? Что агрегировать будем?
RU
+
US
что должно получиться? -
-
ну так SummingMT order by (do , country sid, tid)
-
ну вариант может быть и не плохой. но я так понимаю , что проблема с памятью зависит от данных и если данных у меня станет больше (записи тяжелее), то настройку придется опять тюнить опять.. Причем речь идет об одной таблице, с другими таких проблем нет
-
я к тому, что нет ли какого-то режимва "авто", который бы сам определял хватит ли озу для merge при группировке или нет? или это мне надо самостоятельно сначала посчитать число байт.. а потом уже делать запрос с group by , предварительно установив aggregation_memory_efficient_merge_threads в какое-то расчетное значение
-
на этот момент нет вроде. можно только эвристикой через приложение добавлением в SETTINGS
-
Joined.
-
спасибо. будем думать
-
Ну так агрегации по этим полям не будет - do , country ..
и при выборке их все печитывать придется ,а не какие то уники брать
так как они текстовые ... есть ли смысл какой то где склеивать JSON ( или не JSON ) для этого
чтобы потом выборку делать типа
sid = 1 , tid = 123 , RU>1 , desktop > 1 , click>1
При вычитке же если имя поля в таблице не упомянать оно и не будет дергаться?
Не дешевле тут добавть в таблицу 200 полей с именами стран ? и ставить = 1 на страну нужную ? -
summingMT последний абзац доки, поля заканчиваются на ....Map, nested....
sumMap( ['RU', 'US'] , [ 2, 4 ] ) -
Всех приветствую. Осторожно, возможно дилетантский вопрос! В оф. документации сказано, что "Данные рекомендуется вставлять пачками не менее 1000 строк или не более одного запроса в секунду.". Кто-нибудь контролирует это, если да, то как?
-
-
там есть сложный контроль в фоне, который сначала начнет тормозить, потом вообще перестанет принимать вставки
-
а руками самому как-то можно отслеживать (про 1000 строк понятно), что вставка выполняется примерно раз в секунду?
-
-
Спасибо. 👌
-
Ну есть метрики которые можно поллить
Или можнл поллить число партов в таблице -
это типа рекомендуемые параметры, можно просто раз в сек. просыпаться и делать инсерт.
я делаю по другому,
после каждого инсерта проверяю
select value from system.asynchronous_metrics where metric = 'MaxPartCountForPartition'
если там больше условно 100, останавливаюсь
я в курсе что КХ умеет тоже самое :)
но все несколько сложнее, мне можно вставить в другой шард
но при этом контроллируется чтобы в шардах в скользящих 24 часах примерно одинаковое кол-во. -
Спасибо, буду экспериментировать)
-
Подскажите, что не так
-
-
-
-
Делаю виборку по remote_addr, находит несколько строк, копирую токен пусто
-
-
-
SHOW CREATE TABLE ngx_logs.logs_v1_buffer
┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE ngx_logs.logs_v1_buffer
(
remote_addr String,
remote_addr_int UInt32 MATERIALIZED IPv4StringToNum(remote_addr),
remote_user String,
http_x_forwarded_for String,
time_local String,
logtime DateTime,
Date Date DEFAULT toDate(logtime),
logtimeUnixTimestamp UInt32 MATERIALIZED toUnixTimestamp(logtime),
request String,
status UInt16,
body_bytes_sent UInt32,
http_referer String,
http_user_agent String,
request_time Float64,
http_Host String,
server_addr String,
server_addr_int UInt32 MATERIALIZED IPv4StringToNum(server_addr),
server_name String,
upstream_connect_time Float64,
upstream_header_time Float64,
upstream_response_time Float64,
upstream_cache_status String,
upstream_addr String,
upstream_addr_int UInt32 MATERIALIZED IPv4StringToNum(upstream_addr),
upstream_status String,
gzip_ratio Float64,
scheme Enum8('unknown' = 0, 'http' = 1, 'https' = 2),
cookie_x-referer String,
request_id String,
request_length UInt32,
bytes_sent UInt32,
header_bytes UInt32 MATERIALIZED bytes_sent - body_bytes_sent,
type String,
host String,
host_int UInt32 MATERIALIZED IPv4StringToNum(host),
logsource String,
req_method String,
req_user_hash String,
req_server_tt String,
req_stream_name String,
req_stream_type String,
req_user_token String,
req_user_id String,
req_user_vip String,
req_user_dip String,
req_user_pip String,
req_user_hip String,
req_server_http String,
req_stream_part UInt32,
req_path String,
xusertoken String,
req_false String,
user_agent.minor String,
user_agent.build String,
user_agent.os String,
user_agent.device String,
user_agent.major String,
user_agent.os_name String,
user_agent.name String,
user_agent_os_major String,
user_agent_patch String,
user_agent_os_minor String,
user_agent_minor String,
user_agent_build String,
user_agent_os String,
user_agent_device String,
user_agent_major String,
user_agent_os_name String,
user_agent_name String,
geocode String
)
ENGINE = Buffer('ngx_logs', 'logs_v1_2', 16, 10, 100, 10000, 1000000, 10000000, 100000000) │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.047 sec. -
ClickHouse client version 20.8.2.3 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.8.2 revision 54438. -
-
Если запрашивать из таблици, а не буфера результат тотже
-
-
Делал, не помогает
-
-
CREATE TABLE ngx_logs.logs_v1_2
(
remote_addr String,
remote_addr_int UInt32 MATERIALIZED IPv4StringToNum(remote_addr),
remote_user String,
http_x_forwarded_for String,
time_local String,
logtime DateTime,
Date Date DEFAULT toDate(logtime),
logtimeUnixTimestamp UInt32 MATERIALIZED toUnixTimestamp(logtime),
request String,
status UInt16,
body_bytes_sent UInt32,
http_referer String,
http_user_agent String,
request_time Float64,
http_Host String,
server_addr String,
server_addr_int UInt32 MATERIALIZED IPv4StringToNum(server_addr),
server_name String,
upstream_connect_time Float64,
upstream_header_time Float64,
upstream_response_time Float64,
upstream_cache_status String,
upstream_addr String,
upstream_addr_int UInt32 MATERIALIZED IPv4StringToNum(upstream_addr),
upstream_status String,
gzip_ratio Float64,
scheme Enum8('unknown' = 0, 'http' = 1, 'https' = 2),
cookie_x-referer String,
request_id String,
request_length UInt32,
bytes_sent UInt32,
header_bytes UInt32 MATERIALIZED bytes_sent - body_bytes_sent,
type String,
host String,
host_int UInt32 MATERIALIZED IPv4StringToNum(host),
logsource String,
req_method String,
req_user_hash String,
req_server_tt String,
req_stream_name String,
req_stream_type String,
req_user_token String,
req_user_id String,
req_user_vip String,
req_user_dip String,
req_user_pip String,
req_user_hip String,
req_server_http String,
req_stream_part UInt32,
req_path String,
xusertoken String,
req_false String,
user_agent.minor String,
user_agent.build String,
user_agent.os String,
user_agent.device String,
user_agent.major String,
user_agent.os_name String,
user_agent.name String,
user_agent_os_major String,
user_agent_patch String,
user_agent_os_minor String,
user_agent_minor String,
user_agent_build String,
user_agent_os String,
user_agent_device String,
user_agent_major String,
user_agent_os_name String,
user_agent_name String,
geocode String
)
ENGINE = MergeTree()
PARTITION BY Date
ORDER BY (Date, logtime, remote_addr_int)
TTL Date + toIntervalWeek(10)
SETTINGS index_granularity = 8192 -
Как я читал доку, правильно через буферную таблицу запрашивать, тогда поподают и данньіе из нее, но блокируется вставка
-
-
так Date разный
-
и где это написано?
- 06 October 2020 (215 messages)
-
Joined.
-
Блин, вот я стормозил
-
Спасибо
-
Всем привет. После вчерашних мытарств оставил issue - https://github.com/ClickHouse/ClickHouse/issues/15644
Можете пинать или закидывать facepalm.jpg )))Clickhouse 20.9.2.20 install on Fedora 32 SysV failed · Issue #15644 · ClickHouse/ClickHouseWhen installing ClickHouse 20.9.2.20-stable on fresh installed Fedora 32 (5.8.12-200.fc32.x86_64) I get following: dnf install clickhouse-server clickhouse-client Последняя проверка окончания срока...
-
-
Пользователя то так и не не создали?
-
Создавал. Не помогла переустановка и с пользователем
-
А с пользователем какая ошибка у systemd? Если ругалось на пользователя, думаю что-то другое теперь должно появиться.
useradd -d /var/lib/clickhouse -U --shell /sbin/nologin clickhouse -
systemctl status clickhouse-server
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; disabled; vendor preset: disabl>
Active: activating (auto-restart) (Result: exit-code) since Tue 2020-10-06 10:03:05 MSK; 1s ago
Process: 3132 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml ->
Main PID: 3132 (code=exited, status=232/ADDRESS_FAMILIES)
CPU: 71ms
окт 06 10:03:05 rpk-db-server systemd[1]: clickhouse-server.service: Main process exited, code=exit>
окт 06 10:03:05 rpk-db-server systemd[1]: clickhouse-server.service: Failed with result 'exit-code'. -
Изначально ошибка при установке - он не может окончательно установить КХ как демон systemd
-
Ошибка с пользователем ушла.
status=232/ADDRESS_FAMILIES я не знаю такого статуса ( Возможно selinux включен на машине. В логах кликах ничего не появляется? -
Если КХ запускать просто вручную, то в логах ничего такого...
-
Думаю потому что вручную он запускается от юзера root, а systemd пытается запустить от пользователя clickhouse
-
sestatus что пишет?
-
sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33 -
-
Скорее всего. Но я пробовал создать этого юзера, но все так же..
-
Просвятите пожалуйста как?
-
Если отключить - первая ссылка из поиска https://www.tecmint.com/disable-selinux-in-centos-rhel-fedora/How to Disable SELinux Temporarily or Permanently
In this how-to guide, we shall walk through steps you can follow to check the status of SELinux and also disable it in CentOS 7/6, in case it is enabled.
-
-
Или мне лучше вместо Fedora лучше использовать CentOS или что то другое? Мне в принципе не критично
-
-
setenforce 0 отключить до перезагрузки (вроде в последних ядрах хотели это запретить, но не точно)
На постоянку
В /etc/selinux/config меняем строку, пишем SELINUX=disabled -
Изначально КХ у меня как демон не ставиться из-за ошибка скрипта при установке:
Synchronizing state of clickhouse-server.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable clickhouse-server
Failed to execute /usr/lib/systemd/systemd-sysv-install: Нет такого файла или каталога
предупреждение: %post(clickhouse-server-20.9.2.20-2.noarch) scriptlet failed, exit status 1
Error in POSTIN scriptlet in rpm package clickhouse-server -
Теперь понятно почему пользователь не создался, до этого этапа просто не дошло. Подозреваю что в федоре выпили sysv окончательно, а установщик требует его.
Но selinux все равно нужно руками либо отключить, либо настроить правила для клика, этого никто не отменял -
С selinux понял, отключу. Но проблему с SysV при установке надо решить.
-
Попробуйте
sudo dnf install chkconfig -y и запустить установку клика заново -
-
Отключил selinux, установил chkconfig, перезагрузил, переустановил КХ, но все равно:
systemctl status clickhouse-server
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disable>
Active: activating (auto-restart) (Result: exit-code) since Tue 2020-10-06 11:02:45 MSK; 7s ago
Process: 1100 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml ->
Main PID: 1100 (code=exited, status=232/ADDRESS_FAMILIES)
CPU: 70ms
[root@rpk-db-server ~]# clickhouse-client
ClickHouse client version 20.9.2.20 (official build).
Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000)
[root@rpk-db-server ~]# systemctl status clickhouse-server.service
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disable>
Active: activating (auto-restart) (Result: exit-code) since Tue 2020-10-06 11:02:45 MSK; 26s a>
Process: 1100 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml ->
Main PID: 1100 (code=exited, status=232/ADDRESS_FAMILIES)
CPU: 70ms -
Может права на каталоги где-то неправильно установились, тоже ошибка пишут такая в этом случае 232/ADDRESS_FAMILIES
https://github.com/ClickHouse/ClickHouse/issues/1981Can't start clickhouse --help · Issue #1981 · ClickHouse/ClickHouseos: Ubuntu 16.04.3 LTS \n \l clickhouse version: 1.1.54342 I use " sudo service clickhouse-server start" . but not start. so I use "systemctl status clickhouse-server.ser...
-
А какие права и куда? Я же просто ставлю так:
dnf install clickhouse-server clickhouse-client -y
Пользователь clickhouse имеется -
Основные каталоги по дефолту в config.xml прописаны
/var/lib/clickhouse
/var/log/clickhouse
/etc/clickhouse-server
Проверить, что владелец у них clickhouse:clickhouse и есть права на чтение/запись
Если установка пофиксилась, можно снести
Юзера clickhouse, которого руками создали```userdel -r clickhouse``` и повторить установку, может где скрипт не отработал, раз пользователь уже существует. -
-
Я до переустановки его ручками снес пользователя clickhouse. И после повторной установки он появился сам
-
Всем привет! Задача такая - есть несколько локальных таблиц с категориями и надо разложить по глобальным таблицам (отдельная категория), хочу сделать через MATERIALIZED VIEW. Да вот UNION is not supported for MATERIALIZED VIEW. Куда читать?
-
Привет. Забираю данные с кафки и пишу в таблицу
CREATE TABLE device_os_queue (
device_os String,
os Int8,
stop timestamp,
min_time timestamp,
max_time timestamp,
count UInt32,
cnt UInt32,
time UInt64
) ENGINE = Kafka('10.0.3.10:9092', 'device_os', 'group1', 'JSONEachRow');
CREATE TABLE device_os_1d (
device_os String,
os Int8,
stop timestamp,
min_time AggregateFunction (min, DateTime('Europe/Moscow')),
max_time AggregateFunction (max, DateTime('Europe/Moscow')),
count SimpleAggregateFunction (sum, UInt64),
cnt SimpleAggregateFunction (sum, UInt64),
time SimpleAggregateFunction (sum, UInt64)
) ENGINE = AggregatingMergeTree()
PARTITION BY toDate(toDateTime(stop))
ORDER BY (device_os, os, stop);
CREATE MATERIALIZED VIEW device_os TO device_os_1d
AS SELECT device_os, os, toDate(toDateTime(stop)) AS stop, minState(toDateTime(min_time)) AS min_time, maxState(toDateTime(max_time)) AS max_time, toUInt32(sum(count)) AS count, toUInt32(sum(cnt)) AS cnt, sum(time) AS time
FROM device_os_queue GROUP BY device_os, os, stop;
Все ок, кроме агрегации min_time и max_time
┌─device_os─────┬─os─┬────────────────stop─┬─min_time─┬─max_time─┬─count─┬─cnt─┬─time─┐
│ Mac OS 10.9.5 │ 0 │ 2020-01-01 00:00:00 │ S�
^ │ ��
^ │ 5 │ 0 │ 0 │
└───────────────┴────┴─────────────────────┴──────────┴──────────┴───────┴─────┴──────┘
Как правильно преобразовывать? -
Всем привет!
Столкнулся с проблемой: после перезагрузки Clickhouse при первом обращении к модели catboost через SELECT modelEvaluate - запрос зависает. После отмены запроса и повторного запуска запрос отрабатывает корректно. Очень похоже на issue трёхлетней давности https://github.com/ClickHouse/ClickHouse/issues/13832
Можете помочь, может кто-то сталкивался и фиксил?First modelEvaluate() call on a newly created CatBoost model deadlocks forever · Issue #13832 · ClickHouse/ClickHouseHello, so I'm working to integrate CatBoost model with our ClickHouse cluster. It appears that, whenever we create a new XML model file in the configured path, the first call to the new mod...
-
Всем привет. может кто сталкивался с такой ошибкой?:
Code: 86. DB::Exception: Received from localhost:9000. DB::Exception: Received error from remote server /identifier_quote?connection_string=DNS%3Dmain. HTTP status code: 500 Internal Server Error, body: Error getting identifier quote style from ODBC 'Code: 404, e.displayText() = DB::Exception: DSN parameter is mandatory for ODBC connection string (version 19.7.3.9 (official build))'
содержимое odbc.ini
[main]
Description = PostgreSQL connection to my_db
Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so
Database = main
Servername = x.x.x.x
UserName = user
Password = pass
Port = 5432
Protocol = 9.6
ReadOnly = Yes
RowVersioning = No
ShowSystemTables = No
ConnSettings = -
Все равно так же:
systemctl status clickhouse-server.service
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disable>
Active: activating (auto-restart) (Result: exit-code) since Tue 2020-10-06 11:41:04 MSK; 17s a>
Process: 990 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml -->
Main PID: 990 (code=exited, status=232/ADDRESS_FAMILIES)
CPU: 65ms
[root@rpk-db-server ~]# systemctl status clickhouse-server
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disable>
Active: activating (auto-restart) (Result: exit-code) since Tue 2020-10-06 11:41:35 MSK; 1s ago
Process: 996 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml -->
Main PID: 996 (code=exited, status=232/ADDRESS_FAMILIES)
CPU: 66ms
окт 06 11:41:35 rpk-db-server systemd[1]: clickhouse-server.service: Failed with result 'exit-code'. -
-
Если от рута запускается, однозначно проблема где-то в правах. Больше не знаю что предположить.
А если из консоли, через sudo сменить пользователя на clickhouse, интересно, запустится или нет
sudo -u clickhouse /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml -
Processing configuration file '/etc/clickhouse-server/config.xml'.
Include not found: clickhouse_remote_servers
Include not found: clickhouse_compression
Couldn't save preprocessed config to /var/lib/clickhouse//preprocessed_configs/config.xml: Access to file denied: /var/lib/clickhouse//preprocessed_configs/config.xml
Logging trace to /var/log/clickhouse-server/clickhouse-server.log
Poco::Exception. Code: 1000, e.code() = 13, e.displayText() = Access to file denied: /var/log/clickhouse-server/clickhouse-server.log, Stack trace (when copying this message, always include the lines below):
0. Poco::FileAccessDeniedException::FileAccessDeniedException(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x18e0cd20 in /usr/bin/clickhouse
1. Poco::FileImpl::handleLastErrorImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x18e17b50 in /usr/bin/clickhouse
2. ? @ 0x18e181f6 in /usr/bin/clickhouse
3. Poco::FileOutputStream::FileOutputStream(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int) @ 0x18e27c0a in /usr/bin/clickhouse
4. Poco::LogFileImpl::LogFileImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x18e39aa1 in /usr/bin/clickhouse
5. Poco::FileChannel::open() @ 0x18e194d4 in /usr/bin/clickhouse
6. Loggers::buildLoggers(Poco::Util::AbstractConfiguration&, Poco::Logger&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x153dbef5 in /usr/bin/clickhouse
7. BaseDaemon::initialize(Poco::Util::Application&) @ 0x153ce208 in /usr/bin/clickhouse
8. DB::Server::initialize(Poco::Util::Application&) @ 0xe790d78 in /usr/bin/clickhouse
9. Poco::Util::Application::run() @ 0x18d31819 in /usr/bin/clickhouse
10. DB::Server::run() @ 0xe7904c9 in /usr/bin/clickhouse
11. mainEntryClickHouseServer(int, char**) @ 0xe787513 in /usr/bin/clickhouse
12. main @ 0xe71a891 in /usr/bin/clickhouse
13. __libc_start_main @ 0x27042 in /usr/lib64/libc-2.31.so
14. _start @ 0xe71a02e in /usr/bin/clickhouse
(version 20.9.2.20 (official build)) -
chown -R clickhouse:clickhouse /var/lib/clickhouse/
chown -R clickhouse:clickhouse /var/log/clickhouse-server/
и еще раз -
-
Я вот такой себе делал профиль, запись тоже тестировал на рейде. Не знаю, правильно или нет, я проверял запись в обход всех дисковых кешей, и с iodepth игрался ещё
fio -ioengine=libaio -size=10G -sync=0 -direct=1 -name=test -bs=4k -iodepth=1 -rw=randwrite -runtime=60 -filename=/data/clickhouse/testfile -
-
-
-
Ну это из истории выдернул, один из вариантов. А вообще проверял фишку с полным отключением кеша из 4.18 ядра find /sys/block/sd?/queue/write_cache -exec sh -c "echo write through > {}" \;
С write back (дефолтным) у меня получился хуже результат. -
Processing configuration file '/etc/clickhouse-server/config.xml'.
Include not found: clickhouse_remote_servers
Include not found: clickhouse_compression
Logging trace to /var/log/clickhouse-server/clickhouse-server.log
Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log
Logging trace to console
2020.10.06 12:33:19.348006 [ 1192 ] {} <Information> SentryWriter: Sending crash reports is disabled
2020.10.06 12:33:19.350070 [ 1192 ] {} <Trace> Pipe: Pipe capacity is 1.00 MiB
2020.10.06 12:33:19.400898 [ 1192 ] {} <Information> : Starting ClickHouse 20.9.2.20 with revision 54439, build id: DA243C6C30A79812, PID 1192
2020.10.06 12:33:19.401067 [ 1192 ] {} <Information> Application: starting up
2020.10.06 12:33:19.404939 [ 1192 ] {} <Trace> Application: Will mlockall to prevent executable memory from being paged out. It may take a few seconds.
2020.10.06 12:33:19.448512 [ 1192 ] {} <Trace> Application: The memory map of clickhouse executable has been mlock'ed
2020.10.06 12:33:19.448657 [ 1192 ] {} <Information> StatusFile: Status file /var/lib/clickhouse/status already exists - unclean restart. Contents:
PID: 1129
Started at: 2020-10-06 12:33:18
Revision: 54439
2020.10.06 12:33:19.449059 [ 1192 ] {} <Error> Application: DB::Exception: Cannot lock file /var/lib/clickhouse/status. Another server instance in same directory is already running.
2020.10.06 12:33:19.449821 [ 1192 ] {} <Information> Application: shutting down
2020.10.06 12:33:19.449855 [ 1192 ] {} <Debug> Application: Uninitializing subsystem: Logging Subsystem
2020.10.06 12:33:19.449947 [ 1195 ] {} <Trace> BaseDaemon: Received signal -2
2020.10.06 12:33:19.449988 [ 1195 ] {} <Information> BaseDaemon: Stop SignalListener thread -
Похоже systemd смог запустить сервер, проверьте клиентом
-
1мб попробовать?
-
Получилось! Спасибо Вам огромное!
-
👍
-
Сейчас в своем issue опишу шаги, чтобы пофиксить это
-
Обычно 512 ок
-
Народ. всем привет
а как в ClickHouse задавать флаги для регулярных выражений в match() ?
или никак и он только Case Sensitive? -
-
-
Syntax
RE2 is a fast, safe, thread-friendly alternative to backtracking regular expression engines like those used in PCRE, Perl, and Python. It is a C++ library. - google/re2
-
-
-
Joined.
-
привет! а кто помнит, с какой версии КХ стали поддерживаться https словари?
-
Ребят, а кто работает с Tableau и КХ (ODBC драйвер)?
У нас есть проблема, что табло может очень долго подтягивать метадату для тяжелого запроса. А если вдруг в запросе была ошибка, то табло не отдает эту ошибку, а уходит в бесконечную загрузку.
Кто-то сталкивался с таким? -
Всем привет. Есть история продаж, которую надо разбить на слоты по определенной сумме. например, первая сотня набрана сегодня в полночь, вторая сотня - завтра утром:
┌─Quantity─┬─toDateTime(Timestamp)─┐
│ 10 │ 2020-05-01 00:00:03 │
│ 86 │ 2020-05-01 00:01:05 │
│ 4 │ 2020-05-01 01:00:01 │
│ 1 │ 2020-05-01 01:11:33 │
│ 24 │ 2020-05-01 02:32:44 │
│ 2 │ 2020-05-01 04:15:25 │
│ 80 │ 2020-05-01 05:00:02 │
│ 1 │ 2020-05-01 08:20:28 │
│ 76 │ 2020-05-01 09:33:17 │
│ 55 │ 2020-05-01 10:00:03 │
└──────────┴───────────────────────┘
=>
┌─Quantity─┬─toDateTime(Timestamp)─┐
│ 100 │ 2020-05-01 01:00:01 │
│ 107 │ 2020-05-01 05:00:02 │
│ 132 │ 2020-05-01 10:00:03 │
└──────────┴───────────────────────┘
Подсунуть sumState(Quantity)<100 в качестве параметра grouping как описано в документации не получается. Есть идеи, кроме как грузить каждую продажу на клиент, и там уже разруливать?) https://clickhouse.tech/docs/ru/sql-reference/functions/other-functions/#runningaccumulateПрочие функции | Документация ClickHouseПрочие функции hostName() Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обраб
-
спасибо большое!
-
Всем добрый день!
КХ у нас используется:
- для API (отчеты пользователям по их данным)
- для аналитики (общий срез по данным всех пользователей)
Необходимо:
К определенным аккаунтам оставить доступ для API, но закрыть доступ для ручных запросов (запросов от аналитиков).
Можно ли в КХ ограничить доступ, запретив получать данные, не подходящие по условию. Например, запретить строить аналитику по accountId=100?
Если нет, подскажите, пожалуйста, в какую сторону смотреть. -
можно
https://clickhouse.tech/docs/en/sql-reference/statements/create/row-policy/ROW POLICY | ClickHouse DocumentationCREATE ROW POLICY Creates a row policy, i.e. a filter used to determine which rows a user can read from a table. Warning
-
но нужна свежая версия clickhouse
-
-
ROW Based security уже наверное больше года через XML настраивается в profiles
но оно недавно только в SQL синтаксис перебралось -
за 2.5 года съел raid10 из 4×SSD 512GB
-
Добрый день!
нужно заставить рабоать мигратор alembic, использую диалект clickhouse-sqlalchemy
может кто сталкивался, как прописивается движок таблицы в метадате, чтобы корректно сгенерился скрипт -
кто-то работал с таким?
-
-
понял
пардон -
Какой движок для таблиц лучше использовать для сбора сырых данных? В приоритете быстрая вставка, быстрая выборка, и возможно последующие преобразования из мгновенных данных в 3-минутные, 1-часовые, суточные посредством арифметического усреднения.
-
MergeTree
но КХ не любит частых вставок. -
классный способ — класть данные в кафку, а оттуда через kafka table engine сохранять в КХ
-
Всем привет.
Подскажите, пожалуйста, есть ли в КХ возможность посмотреть текущие операции перемещения и мерджа партов? -
-
Есть примеры или юзкейс ?
-
ClickHouse Kafka Engine Tutorial
Our colleague Mikhail Filimonov just published an excellent ClickHouse Kafka Engine FAQ. It provides users with answers to common questions about using stable versions, configuration parameters, standard SQL definitions, and many other topics. Even experienced users are likely to learn something new. But what if you are getting started and need help setting up Kafka and ClickHouse for the first time? Good news! This article is for you.
-
Joined.
-
Действительно ни у кого не было проблем с табло?)
-
Насколько частых? Если 500-1000 строк в секунду это плохо ?
-
Были конечно)
-
CH+Tableau нужно аккуратно готовить с учетом структуры данных и версий.
1) Постараться использовать побольше экстрактов
2) Писать запросы на уровне Level of Details
3) Были некоторые хитрости с работой с NULL данными из-за них всё висло, возможно у вас подобные проблемы. К сожалению, не помню как решил, Юрий Фаль помнится помог. Потом может найду старый дашборд какой, скину, как решал эту проблему. -
Частый это количество вставок на момент времени, а не про объем, 1000 строк в одном запросе в секунду - ок, 1000 строк в 1000 запросах не ок
-
В целом по гайдам 1 вставка в секунду на таблицу
-
-
-
-
-
GraphiteMT умеет то что вы хотите, но он считает среднее от среднего , а не sum/cnt , поэтому для avg у него херня получается, хотя может вы этого и хотите
еще можно делать TTL / group by поверх SummingMT -
system.merges
-
Joined.
-
каждый инсерт создает парт (или несколько, если сделать все неправильно),
много партов плохо,
сколько строк внутри парта, значения не имеет -
КХ парты не объединяет ?
-
объединяет конечно. Проблема в том что мелкие парты объединяются за то же время что и немелкие, потому что много накладных расходов, каждый парт -- это множество файлов, каждый файл надо открыть, сделать seek, а жесткий диск не умеет много seek
-
Прошу прощения, я неверно задал вопрос. В первую очередь меня интересуют именно текущие перемещения.
-
system.merges -- виртуальная таблица, отображает мержи идущие прямо сейчас
-
Но в ней нет информации о текущих перемещениях партов с диска на диск.
-
????
парты перемещаются только мержем, как там может не быть информации??? -
просто делайте несколько MV которые читают из тех таблиц, а пишут в одну TO таблицу
-
ну minMerge
НО !!!!! ВАМ ЭТО НЕ НУЖНО ВАМ НУЖНО, используйте SimpleAggregateFunction
min_time SimpleAggregateFunction (min, DateTime('Europe/Moscow')),
max_time SimpleAggregateFunction (max, DateTime('Europe/Moscow')), -
про minMerge дошел да, за Simple спасибо. такая большая разница в производительности?
-
заводите баг, в этом разбираются только несколько человек девелоперов КХ и они не читают чат.
-
Ситуация такая: КХ должен по TTL перемещать данные на другой диск. Проблема в том, что целевой диск оказался настолько медленным, что перемещение идёт с опозданием в несколько дней. В частности, я вижу недозаписанный парт в целевом диске в папке detached, но не вижу информации об этом в system.merges. Однако, если я попытаюсь переместить парт вручную через ALTER TABLE MOVE PART TO DISK, я получаю ошибку
Code: 384. DB::Exception: Received from localhost:9000. DB::Exception: Cannot move part '20201004_51015_52721_5' because it's participating in background process.
Я делаю из этого вывод, что в system.merges подобная информация не отображается. -
до двух раз, в два раза меньше байт в памяти надо перекладывать
-
Issue в github уже есть от 2017 года. Думаете нужно новый открывать?
-
это починено давно, но 19.7 конечно никто не исправлял
-
хм, https://github.com/ClickHouse/ClickHouse/issues/13832 -- это свежий это 17 августа
не надо тогда открывать -
Ок, тогда будем ждать, спасибо
-
Спасибо!) Хочется как-то более элегантно... А если сделать view и на нее натравить MV? ))
-
ок. спс.
-
MV это триггер на инсерт. View не получает инсертов.
https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7583 -
👍
-
Joined.
-
-
Joined.
-
-
MergeTree
можете ин мемори куски использовать с последней версии и можно вставлять часто -
-
Это с какой версии КХ? И как это настраивается?
-
-
-
system.part_log | ClickHouse Documentation
system.part_log The system.part_log table is created only if the part_log server setting is specified. This table contai
-
Большое спасибо.
-
Я почему-то не зацепился глазом за эту статью в доках.
-
Слушайте,
SELECT multiSearchAllPositions('test1 test2 test3', [' '])
┌─multiSearchAllPositions('test1 test2 test3', [' '])─┐
│ [6] │
└─────────────────────────────────────────────────────┘
это же Баг ? или я как то не правильно понимаю документацию? почему второй пробел не ищет? -
ааа блин пока читал ... это просто position Только для множества substring ;(
-
название функции вообще не ментальное ;(((
-
Народ помогите реализовать аналог mysql SUBSTING_INDEX ? https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index ?
-
SELECT arrayFilter((i, j) -> (j = ' '), arrayEnumerate(x), extractAll('test1 test2 test3', '.') AS x)
[6,12] -
а кстати extractAllGroups(text, regexp)
-
или надо только позиции?
-
надо как в SUBSTRING_INDEX
то есть
mysql> SELECT SUBSTRING_INDEX('test1 test2 test3',' ',1);
| SUBSTRING_INDEX('test1 test2 test3',' ',1) |
+--------------------------------------------+
| test1 |
mysql> SELECT SUBSTRING_INDEX('test1 test2 test3',' ',2);
| SUBSTRING_INDEX('test1 test2 test3',' ',2) |
+--------------------------------------------+
| test1 test2 |
mysql> SELECT SUBSTRING_INDEX('test1 test2 test3',' ',3);
| SUBSTRING_INDEX('test1 test2 test3',' ',3) |
+--------------------------------------------+
| test1 test2 test3 | -
ну то есть нужны позиции пробелов да
но что-то мне кажется фильтровать посимвольно, блин. оно ж медленно будет ;( -
select arraySlice(extractAll('test1 test2 test3', '\\w+'),1,1)
select arraySlice(extractAll('test1 test2 test3', '\\w+'),1,2)
select arraySlice(extractAll('test1 test2 test3', '\\w+'),1,3) -
ага =) arraySlice наверное в этом случае будет лучше. спасибо
-
нет все таки не так ;(
блин ну почему нету тупо функции выдать все позиции конкретной подстроки =( -
ну не надо было до этого, с массивами все сложнее, индексов нужно избегать, чтобы не передавать массив в лябду
-
проблема в том что test2 test2 не обязательно попадают под \w+ ;(
там может быть test1/test2 test3 -
????
select extractAll('test1 test2 test3', 'test?') -
select extractAll('test1 test2 test3', 'test.+')
-
select extractAll('test1 test2 test3', 'test(.)')
-
нет
еще раз. мне НЕ НАДО ВЫТАЩИТЬ ТОКЕНЫ
мне надо отобразить кусок строки, в соответсвии с энной позицией разделителя
mysql> SELECT SUBSTRING_INDEX('test1 test2 test3',' ',1);
| SUBSTRING_INDEX('test1 test2 test3',' ',1) |
+--------------------------------------------+
| test1 |
mysql> SELECT SUBSTRING_INDEX('test1 test2 test3',' ',2);
| SUBSTRING_INDEX('test1 test2 test3',' ',2) |
+--------------------------------------------+
| test1 test2 |
mysql> SELECT SUBSTRING_INDEX('test1 test2 test3',' ',3);
| SUBSTRING_INDEX('test1 test2 test3',' ',3) |
+--------------------------------------------+
| test1 test2 test3 | -
еще раз вместо test1 test2 test3 могут быть произвольные строки то
а не по паттерну -
А разделители фиксированы?
-
внутри строки
-
да, разделитель фиксированный
если бы была возможность тупо в массив вытащить все позиции разделителя в строке
то я бы к этому массиву просто применил
substr
я думал сработает
SELECT substring('test1 test2 ', 1, arrayElement(multiSearchAllPositions('test1 test2 ', [' ']), 2))
но выяснилось что AllPostions это нифига не AllPositions ;( -
SELECT extractAll('test1 test2 test3', '([^ ]*)( |$)')
┌─extractAll('test1 test2 test3', '([^ ]*)( |$)')─┐
│ ['test1','test2','test3'] │
└─────────────────────────────────────────────────┘ -
да наверное так подойдет
с этого дальше arraySlice навреное можно применить -
А версия, предложенная Denny, но слегка доработанная не подойдет? arraySlice + splitByString?
-
о! то что надо =) никаких regexp ;)
-
Спасибо чатег!
-
или splitByChar
-
@den_crane вам отдельный респект
-
Чатик привет
Ситуация:
1)есть таблица - partition toYYYYMM(time)
2) Для любого инсерта гарантировано, что он будет для одной партиции
3) Гарантировано, что для каждой партиции будет записано не более 300кк строк
Правильно ли я понимаю,
что поставив
min_insert_block_size_row= max_insert_block_size_row=300кк и соответственно подобрать min_insert_block_size_bytes, то можно утверждать, что любой insert будет атомарным? -
-
да все правильно.
min_insert_block_size_row= max_insert_block_size_row=300кк <--- это херня какая-то, я примерно понимаю о чем вы, но это не надо настраивать, такие параметры вообще есть?
достаточно:
max_insert_block_size=1mil (по дефолту)
+min_insert_block_size_bytes просто задрать до 100ГБ
(на уровне Таблица+MV инсерт не будет атомарным) -
--min_insert_block_size_rows arg Squash blocks passed to INSERT query to specified size in rows, if blocks are not big enough.
это если селект выдает маленькие блоки -- клеить в больший -
В таком случае (инсертим в одну партицию), любой инсерт меньший min_insert_block_size_rows - атомарен?
-
min_insert_block_size_rows ну поставьте =1 mil -- он наверное и так 1 mil. , но кмк этот параметр не будет работать для обычного инсерт, только для insert select
-
то есть отфильтровать 2017-08, где нужно найти такие даты 2017-08-* к примеру.
Как можно такое осуществить? -
toYYYYMM(timecol)=201708
toStartOfMonth(timecol) = '2017-08-01' -
timecol >= '2017-08-01 00:00:00' and timecol < '2017-09-01 00:00:00'
-
Спасибо!
-
-
Может кто-то подскажет есть ли ограничения какие-то на длину запроса?
-
Да, но они достаточно большие, а в чем вопрос?
-
нету, по дефолту есть лимитер 256кб, я менял на 100мб
-
берутся ключи из постгри и вставляются в поиск в кликхаусе
надо понять какие могут быть ограничения на это -
если через get посылать то 16кб, а через post сколько угодно
max_query_size arg Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later) -
к запросу можно ещё external data прикреплять https://clickhouse.tech/docs/en/engines/table-engines/special/external-data/External Data | ClickHouse Documentation
External Data for Query Processing ClickHouse allows sending a server the data that is needed for processing a query, to
-
а да external-data еще лучше, там парсер по другому, быстрее in список разбирает
-
да, там будет IN
-
external-data от RAM уже не зависит?
это конечно теоретически уже -
max_query_size arg?
-
external-data создает временную таблицу, в памяти, должно поместится
-
да, это на размер запроса лимит, чтобы случайно 100ГБ sql не уронил КХ
-
я менял на большие значения, чтобы через jdbc посылать SQL с огромным спиcком in
(jdbc не умеет external-data) -
благодарю, буду ронять!
-
всем привет, кто может объяснить пжл, почему у меня выдаёт такую ошибку?
-
-
какой PARTITION KEY
-
Ой, да, я случайно по units делал partition
-
обьясните плиз такую ситуацию. Есть таблица без
партиций. Размер порядка 40GB. над ней выполняется
такого вида запрос select distinct id, version from
table where column1 in ('v1','v2','v3') and column2 in ('d1','d2','d3')
И вот такой запрос выполняется медленно ( идет по все записям таблицы).
Но после партиционирования partition by id % 64 такие же запросы
вдруг ускоряются, хотя они обрабатываю тоже самое количестов строк,
а размер таблицы (хотя в числе строк остается таким же ) в гигабайтах вырастает до 60G. ну т.е понятно почему размер таблицы вырос. почему запросы ускорились непонятно -
Скорее всего дело в том, что каждому треду назначается какой то кусочек одной партиции, тк в каждой партиции теперь содержится гораздо меньше различных id, то выходит что для каждого треда хеш таблица будет меньше.
-
для проверки стал делать одним тредом. он даже вот одним тредом быстрее
-
Ну локальность все равно сохраняется же, ты же смотришь один тред в первом и один тред во втором случае
-
не совсем понял. я беру и запускаю в один тред тот же запрос на первой таблице. он работает долго, но на второй таблице запрос в один тред работает быстрее.
-
Ну в таком случае он все равно пробегает партиции по очереди, а не вперемешку и те даже в таком случае некая локальность значений помогает
-
в первом случае все данные лежат в одном файле, который начинается с all_ , а во втором получается много файлов. скажем 64, но ведь это все теже самые данные. в чем выигрыш? вот там заметно, что в первом случае он что-то долго считает до того, как начать сканирование файлов
-
Анализ индекса скорее всего
-
set send_logs_level='trace';
-
и выполни запрос
-
а что там такое может быть тяжелого в анализе индекса. как то мало верится в локальность. слишком большая разница на выходе. кстати на выходе запроса строк не много - это всего тысячи.
-
делал это. он что-то делает еще до того, как логи какие-то начинает выкидывать.
-
непонятно,
Насколько большая разница между временем выполнения запроса?
Reading 1 ranges from part all_1_1_0, approx. 1007616 rows starting from 0
тебя интересует щас, насколько быстро появляется подобная запись -
это примерно 120 секунд по сравнению с 25.
-
вот время проходит очень много в первом случае до подобной записи очень много
-
Серьезное различие.
покажи ORDER BY таблицы, есть ли доп индексы.
Сколько записей в таблице -
а во втором случае он почти сразу начинает писать подобные записи.
-
порядка 800 миллионов строк. вес - 40GB. индексов нет.
-
order by id, version. причем если поменять его на Group by id,version то резульатат по времени сопоставимый.
-
может если очень большие mrk файлы, то ему его долго анализировать. но ведь это странно. он же весь в памяти.
-
версия кх?
>а во втором случае он почти сразу начинает писать подобные записи.
Можешь показать записи с анализом индекса?
Перепиши оба запроса на
SELECT key FROM test_distinct GROUP BY key FORMAT Null;
И сравни такие строки в логе
AggregatingTransform: Aggregated. 1000000 to 10000 rows (from 3.81 MiB) in 0.003344693 sec. (298981102.3014668 rows/sec., 1.11 GiB/sec.) -
mrk файлы не обязательно в памяти находятся, это не индекс
-
завтра только смогу. а что значит asynchronous в пайплайне в случае аггрегации? в sort by Он есть а в Group by его нет
-
не видел такого если честно, или ты смотришь EXPLAIN ?
-
в нешей версии его еще нет. у нас что-то 19.14.... смотрел в логе.
-
Ох, это старая версия.
Там наверное что угодно может быть - 07 October 2020 (197 messages)
-
Привет, CH читает с ошибкой записи в формате JSON из Кафки: version 19.4.0 revision 54416.
<Error> void DB::StorageKafka::streamThread(): Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected { before: \0: (at row 2)
Хотя у меня на локальном все норм и данные те же...
Локальная версия: version 19.4.0 revision 54416. -
-
Добрый день, товарищи.
Выполняю такой запрос(Хочу посчитать количество унакальных значений в столбце за сутки):
SELECT count(distinct stream_id) FROM БАЗА.data WHERE timestamp between '2020-10-06 00:00:00' and '2020-10-06 23:59:59'
Выполняется он так долго:
1 rows in set. Elapsed: 998.163 sec. Processed 2.67 billion rows, 12.94 GB (2.68 million rows/s., 12.96 MB/s.)
Версия Кликхаус: 20.5.2 revision 54435
Размер базы: 68 ГБ (Прирост в месяц сейчас +7 ГБ)
Нагрузка CPU во время выполнения: 50% - 60%
Сервер: 8 CPU / 16 RAM
Возможно ли как-то посчитать количество записей быстрее и с меньшими ресурсами?
Странно что для суток перебирается в базе аж 12.94 GB ведь в сутки нет столько данных -
Проблема решилась изменением timestamp на date. Видимо timestamp тяжело обрабатывается
-
Зависит от сортировки и партиционирования. Попробуйте ещё uniqCombined вместо count distinct
-
у тебя PARTITION BY toYYYYMM(date) какой нибудь стоит в структуре таблицы
и ORDER BY date
поэтому так быстро и посчиталось потому что легче определить какие куски данных вытащить
а с timestamp у тебя приходится фильтровать все 2.67 миллиарда строк -
-
да все что в system.settings прописывается в profiles и лучше прописать через users.d
можно прямо в INSERT ... SETTINGS insert_deduplicate=0 попробовать
или если http протокол
то через параметр в query string передать
а SQL запрос в POST BODY -
а зачем вам это вообще отключать?
вы понимаете какую именно дедупликацию тут осуществляет clickhouse? -
дурацкую дедупликацию осуществляет КХ. Не контролирует удаление и как следствие дедупликация превращается в баг, а не фичу...
-
Народ
а нет ли какой то функции а-ля
coalesce
но для обычных не Nullable значений?
у меня есть большой здоровый
multiIf
который может вернуть пустую не NULL строку
мне бы хотелось что нибудь типа
coalesce( multiIf(...), 'Unknown')
чтобы через обычный if
if( multiIf(...)='', 'Unknown', multiIf( .. чтобы это второй раз не вычислялось)) -
Всем привет, подскажите пж. Если изначально стоит internal_replication: False и уже много данных накопилось, то ничего страшного и ужасного не произойдет, если я переделаю на internal_replication: True ?
-
Спасибо
-
работает даг, по которому собирается таблица при помощи инсертов
инсерты проходят пачками (одинаковое кол-во городов)
в логах пишется, что инстерт делается, а по факту нет -
А, ясно, спасибо
-
в какую таблицу вставляете ReplicatedMergeTree? или Distributed поверх ReplicatedMergeTree?
он у вас этот INSERT полностью одинаковый два раза или нет? -
AggregatingMergeTree
в инсерте кол-во строк может быть разным
одинаково кол-во городов в пачке -
"кол-во городов в пачке" мне это ни о чем не говорит
но вы явно теребите не ту настройку
указанная настройка применяется только для *ReplicatedMergeTree
у вас ReplicatedAggregatedMergeTree? если нет. не трогайте настройку
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-insert-deduplicate
Эта настройка отключает дефолтное поведение при вставке в Replicated таблицу
Дефолтное поведение
ClickHouse хранит контрольные сумммы последних N блоков в ZK
и при вставке смотрит на контрольную сумму блока который вы вставляете (ДО АГГРЕГАЦИИ в движке и До РЕПЛИКАЦИИ).
и если есть блоки с точно такой же контрольной суммой, тогда блок игнорируется, потому что это значит что связь порвалась во время предыдущего INSERT и клиент досылает данные повторно...Settings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
как вы проверяете что у вас "данные не вставились"?
откуда такая уверенность? -
Через логи дага
-
-
в логи DAG (apache airflow? или что?)
пишется что именно?
Запрос проверочный делаете через SELECT ... FINAL ?
потому что AggregatingMergeTree
аггрегацию делает
через применение аггрегирующих функций во время background merge
а не во время вставки -
https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/aggregatingmergetree/
думаю что стоит внимательно перечитать вот эту частьAggregatingMergeTree | ClickHouse DocumentationAggregatingMergeTree The engine inherits from MergeTree, altering the logic for data parts merging. ClickHouse replaces
-
-
не нужно, КХ сам при необходимости отсортирует
-
окей, спасибо
-
сортировать имеет смысл только на ОЧЕНЬ ОЧЕНЬ больших объемах данных
чтобы CPU clickhouse экономить
но гораздо больше CPU можно экномить если грамотно кодеки применять и коэффициентами сжатия для ZSTD играться -
Но да, с целом не надо ничего специально сортировать, смысла не имеет
-
спасибо принял, полезно)
-
-
А есть клиент clickhouse-client скомпилированный под Windows ?
-
airflow да
через select да
в рамках этого запроса не использую merge
потому что просто нет целого города -
-
Здравствуйте.
Процессы КХ сожрали почти всю память. Но при этом ни каких запросов не выполняется вобще. Как можно понять что происходит и кто потребляет такое большое вол-во ресурсов? -
нет
используте HTTP интерфейс и curl
или DataGrip -
SELECT * FROM system.merges
SELECT * FROM system.dictionaries
SELECT * FROM system.processes -
-
всем привет. А можете подсказать, как таблицы timestamp, value - найти максимально приближенное значение value к задаваемой константе? Например, у меня есть лог накопления кредитов пользователем, и я хочу понять, в какой момент времени он достиг какого-то порога (хотя его value может быть ближайшем, но не точно соответствовать константе)
Либо вверх, либо вниз -
@odainic я вот спрашивал подобное, пока никто не ответил, и сам тоже не решил средствами КХ
-
😭
-
решил пока путем забора всей инфы и агрегацией путем прогона каждой записи пока переменная не превысит указанный треш
-
если вниз то вроде MAX(value) less than or equals CONSTANT должно работать, если вверх, то MIN(value) more than CONSTANT. Ну и логично, что если верхнее есть то нинее искать не нужно, никакой специфики КХ тут вроде нет или я что -то не понял
-
если я правильно уловил мысль, то история примерно такая: (то бишь кумулятивная сумма с обнулением при достижении лимита) https://t.me/clickhouse_ru/185578Lars Ulrich in ClickHouse не тормозит
Всем привет. Есть история продаж, которую надо разбить на слоты по определенной сумме. например, первая сотня набрана сегодня в полночь, вторая сотня - завтра утром: ┌─Quantity ─┬─toDateTime(Timestamp) ─┐ │ 10 │ 2020-05-01 00:00:03 │ │ 86 │ 2020-05-01 00:01:05 │ │ 4 │ 2020-05-01 01:00:01 │ │ 1 │ 2020-05-01 01:11:33 │ │ 24 │ 2020-05-01 02:32:44 │ │ 2 │ 2020-05-01 04:15:25 │ │ 80 │ 2020-05-01 05:00:02 │ │ 1 │ 2020-05-01 08:20:28 │ │ 76 │ 2020-05-01 09:33:17 │ │ 55 │ 2020-05-01 10:00:03 │ └──────────┴───────────────────────┘ => ┌─Quantity ─┬─toDateTime(Timestamp) ─┐ │ 100 │ 2020-05-01 01:00:01 │ │ 107 │ 2020-05-01 05:00:02 │ │ 132 │ 2020-05-01 10:00:03 │ └──────────┴───────────────────────┘ Подсунуть sumState(Quantity)<100 в качестве параметра grouping как описано в документации не получается. Есть идеи, кроме как грузить каждую продажу на клиент, и там уже разруливать?) https://clickhouse.tech/docs/ru/sql-ref…
-
да, очень похоже. но мне на группы не надо бить. только по константе определенной.
-
ну тут чуть сложнее, потому как диапазоны вроде какие -то, сорри вчитываться пока времени нет. но в теории можно на персентили разделить и использовать что -то вроде quantilesExact
-
KILL QUERY вообще работает? выполняю, он "успешно" проходить, но запрос как работал так и работает
-
ну мне надо знать время, когда сумма продаж достигла трешхолда и смотреть дальше. типа фиксировать время выполнения плана по пятилетке
-
-
скажем так, надо зафиксировать время выполнения плана. план в $100 выполняется, например, двумя продажами по $50, и план может быть выполнен неограниченное количество раз, по сути сто продаж по $100 в одну микросекунду - это 100 выполнений плана
-
он ничего не убивает. он проставляет флаг, а запрос периодически смотрит на этот флаг и завершается когда он проставлен
-
ну сходу приходит что -то вроде
select id, sum(sale) as summary, timestamp ... ON summary equals 100
AND id > last_founded_id GROUP BY timestamp.
но я не на столько часто пишу sql, тут просто поиграть с запросами нужно, точнее вряд ли подскажу. -
та не, тут же и смысла нет пробовать, если история набора идет сегодня 100, завтра 200, и в завтрашней записи будет 200, а не 300 (то есть второе событие не в курсе о первом), надо ведь знать сумму
-
Привет, как можно дробнуть партиции с каким-то условием
ну вроде ALTER TABLE таблица DROP PARTITION partition WHERE toDateTime(partition) < toDateTime(addMonths(today(),-6)) -
ну дык сделай кумулятивную сумму по каждому user_id
-
ну там нет юзеров, просто сам факт, объем и время продажи. и кумулятивную сумму эту надо обнулять при достижении определенного объема. И вот в этом-то и вопрос
-
чую, что пахнет чем-то из оконных функций, которых в КХ толком нет же
-
-
-
ну я так себе сварщик. может, это и можно в лямбду обернуть. мог бы - обернул, а не в чатик бы ходил
-
там примерно подразумевалось что -то вроде
```
SELECT
T.Id,
T.sale,
T.timestamp
(SELECT
sum(sale) FROM Table
WHERE Id <= T.Id) 'total'
FROM Table T
HAVING total = 100
```
тут только нужно как -то ограничить выборку чтобы не считать уже посчитаные записи ну и да по таймштампу сортировать чтобы по порядку было -
Не вариант, надо иметь результат за всю историю
-
Привет. Вопрос к знатокам, чем может ограничиваться, сколько партов мерджится? Есть около 500 несмердденных партов, а мерджи объединяют по 5-6 кусков, хотя иногда вижу и по 10, как укрупнить мерджи?
-
думаю это логика в коде... есть только на максимальный размер парта трешолды и пул
попробуйте пул увеличить -
Background_pool_size, который? 40 стоит при 10 мерджах
-
привет
столкнулся с тем, что мутации не выполняются
просто висят
select parts_to_do, latest_failed_part from system.mutations where is_done=0;
SELECT
parts_to_do,
latest_failed_part
FROM system.mutations
WHERE is_done = 0
┌─parts_to_do─┬─latest_failed_part─┐
│ 10 │ │
│ 10 │ │
│ 10 │ │
│ 10 │ │
└─────────────┴────────────────────┘ -
-
какая версия КХ ?
Я бы сделал detach table / attach table и читал в логе что КХ напишет про мутации после attach -
версия 19.4.1
-
тогда возможно просто глюк, и detach/attach просто починит
-
-
помогло, спасибо
-
-
если они лидера нового выберут, то должно ;)
-
они сами там должны определиться?
а то в readonly уходит( -
-
ну вообще я бы еще один ZK погасил чтобы был один лидер
-
ок, спс. все в докерах еще, мб просто они не видят еще друг друга
-
может быть. но стоит логи контейнеров с ZK посмотреть чтобы понять что происходит
-
ЗК должны быть в одном ансабмле, а не standalone
т.е. один лидер и 2 фоловера
проверяется echo stat | nc <zookeeper ip> 2181
все КХ должны видеть всех ЗК (в конфиге КХ надо прописать либо все ЗК либо dns-запись за которой все ЗК) -
@den_crane , привет, я чего то совсем не допираю. Мне по наследству достался кластер кликхауса из 3 шардов и в каждом по 3 реплики, internal_replication стоит в False. Создана табличка с помощью движка MergeTree и на нее повешана Distributed таблица. Правильно я понимаю, что в такой конфигурации у нас каждая нода( а их 9 ) для этой таблицы как отдельный шард? Если да, то каким образом кликхаус шардирует это.
И еще один вопрос, мне нужно переставить internal_replication в True. То, тогда, как поведет себя кликхаус с этой табличкой? -
у вас используется "детская" репликация, основанная на Distributed + internal_replication = False
у вас 3 шарда и в каждом 3 реплики
при internal_replication = True все сломается к херам ("репликация" остановится) -
Данные похерит?
-
"репликация" остановится
и данные разъедутся, все результаты запросов станут неверными -
А там каждая нода как отдельный шард?
-
вы издеваетесь?
-
у вас 3 шарда и в каждом 3 реплики
у вас 3 шарда и в каждом 3 реплики
у вас 3 шарда и в каждом 3 реплики
у вас 3 шарда и в каждом 3 реплики -
Да, я знаю что 3 шарда и в каждом по 3 реплики, ни в коем случае не издеваюсь)
-
Я просто решил потестить и создал тестовый кластер, запихал туда данных и увидел, что они расползлись на каждую ноду
-
и что теперь? нам не видно как вы там создали .xml и таблицы.
-
https://clickhouse.tech/docs/ru/engines/table-engines/special/distributed/
У каждого шарда в конфигурационном файле может быть указан параметр internal_replication.
Если он выставлен в false (по умолчанию), то данные будут записываться на все реплики. По сути, это означает, что Distributed таблица занимается репликацией данных самостоятельно. Это хуже, чем использование реплицируемых таблиц, так как не контролируется консистентность реплик, и они со временем будут содержать немного разные данные.Distributed | Документация ClickHouseDistributed Движок Distributed не хранит данные самостоятельно, а позволяет обрабатывать запросы распределённо, на неско
-
А, точно, прошу прощения, я немного запутался в дата грипе. Сейчас перепроверил)
-
То есть единственный нормальный вариант - переделывать с MergeTree на ReplicatedMergeTree и только после этого можно смело менять на internal_replication в True
-
Такое ощущение из ваших слов что internal_replication = true это ваша цель. Что как-то странно.
Какая вам разница что там? Скоро сделают auto. Там будет auto. -
Разработчики хотят действий по кластеру, не хотят по каждой ноде проходить, вот и встала такая задача
-
тогда вы совсем все неправильно поняли.
on cluster запросы никак не соотносятся с Replicated и тем более c internal_replication
они просто случайно тоже работают через зукипер -
on cluster прекрасно работает для MergeTree таблиц, при internal_replication = false
-
-
Добрый вечер, знатоки clickhouse. Подскажите, пжл, как можно разложить строковое поле, имеющее вид списка из словарей (json Array) в строки новой таблицы. Детализирую ниже.
Я хочу из такой строки в старой таблице
test_column | id
--------------------------
[{"x":"5"}, {"x":"7"}] | 5
Получить вот такую форму в новой
x | id
------
5 | 5
7 | 5 -
JSONExtractString видимо
-
а почему id стал 6 у второй строки?
-
опечатка
-
{"x,7"}
тоже ? -
{"x","7"}
-
да, все поправил
-
Я так понимаю, что для начала мне нужно преобразовать test_column в тип Array. Где элементы - это словари. А потом с помощю arrayJoin развернуть ячейку в строки
-
SELECT
arrayJoin(arrayMap(i -> JSONExtractString(i, 1), JSONExtractArrayRaw(j))) AS r,
id
FROM
(
SELECT
'[{"x":"5"}, {"x":"7"}]' AS j,
5 AS id
)
┌─r─┬─id─┐
│ 5 │ 5 │
│ 7 │ 5 │
└───┴────┘ -
Ох, спасибо большое!
-
лучше не делать таких JSON [{"x":"5"}, {"x":"7"}] , тут 5 и 7 не числа, а типа строки
-
SELECT
arrayJoin(JSONExtract(j, 'Array(Tuple(String))').1) AS r,
id
FROM
(
SELECT
'[{"x":"5"}, {"x":"7"}]' AS j,
5 AS id
)
┌─r─┬─id─┐
│ 5 │ 5 │
│ 7 │ 5 │
└───┴────┘
а ну да, из-за этого и Array(Tuple(Int64)) не работал -
-
Добрый день, создал таблицу
CREATE TABLE dwh.user_level_data_agg_total (
account_id UInt64,
match_count SimpleAggregateFunction(sum, UInt64),
match_start_sum SimpleAggregateFunction(sum, UInt64),
match_finish_sum SimpleAggregateFunction(sum, UInt64)
) ENGINE AggregatingMergeTree() ORDER BY (account_id);
Наполнил ее 7ю млн записями, выполняю след запрос:
select account_id, match_count from dwh.user_level_data_agg_total;
<Information> executeQuery: Read 7419562 rows, 113.21 MiB in 18.760838791 sec., 395481 rows/sec., 6.03 MiB/sec.
Что то я сильно расстроился. 7 млн и такое время .... Или это нормально для AggregatedMergeTree ? -
select g, x, n from (select g, groupArray(x) gx from ( select number%3 g, number x from numbers(10) ) group by g) array Join gx as x, arrayEnumerate(gx) as n
-
Спасибо!
-
select account_id, match_count from dwh.user_level_data_agg_total;
этот запрос вообще ничего не делает, он тупо читает с диска. AggregatedMergeTree тут ни при чем. -
Добрый вечер, подскажите пжл , как можно сделать drop partition по месяцам?
-
КО: вопрос странный. Берете и делаете. alter table x drop partition
-
Joined.
-
обычно я писал:
alter table default.report_ drop partition '2019-10-09';
а по месяцам нельзя сделать просто
alter table default.report_ drop partition '2019-10; -
Кх не обладает таким функционалом, скрипты наше все
-
Сегодня спрашивал, поискал в истории, нашел подходящие запросы, не смог под себя сделать, но очень помогли
-
знаю, что можно сделать через delete
-
Через делит ты будешь удалять записи
-
не знаю, сделалил ли оптимизации сейчас, но раньше это было достаточно больно)
-
ничего не делали
-
У меня вот 16 таблиц и там партиций штук по 100, очень накладно в плане количества запросов делит
-
delete не для этого. Для массовой очистки старых данных drop partition.
partition в КХ вообще больше как раз для этого, нежели для оптимизации селектов как в других базах. -
Так я про это и говорю что партицию целиком надо дропать
-
Но это такая не тривиальная достаточно задача
-
Кстати, парни, в доке написано что партиция удалится примерно через 10 минут, с чем это связано?
-
вроде 8 было. )
-
где написано?
-
Такой себе механизм безопасности, тк за 8 минут новая партиция уже точно должна оказаться на диске.
-
Секунду
-
PARTITION | Документация ClickHouse
Манипуляции с партициями и кусками Для работы с партициями доступны следующие операции: DETACH PARTITION — перенести пар
-
почему?
отправная точка для скриптования где-то тут:
select partition, table, database from system.parts group by partition, table, database order by database, table,partition; -
clickhouse-client -q "select concat('alter table xr.',table,' drop partition ',partition, ' ;')
from system.parts
where toDateTime(partition) < toDateTime(addMonths(today(),-6)) and table = 'table' " -
Отправная тут
-
А если таким Макаром выполнять команды которые гинерирует плейбук, то кх ругается на отсутствие кавычек вокруг имени партиции
-
4 часа сегодня на это потратил, так и не решил
-
Думаю завтра на питоне писать, сроки очень горят
-
Если решу завтра скину решение
-
фигня какая-то.
наверное это про базы Atomic. drop partition пока что удаляет сразу, ничего никто не ждет -
Может быть, я пока верю документации
-
Проверял, партиция исчезает, а про физическое удаление с диска...., пока не заморачивался
-
а я понял про что.
это короче если были inactive парты, то они удалятся через 8 мин.
а настоящие парты с данными активные, удаляются сразу -
Ну ток проверил что файлы с диска удивляются связанные с партицией
-
Круть
-
Завтра хочу домучать задачу
-
Помогите с запросом
-
clickhouse-client -q "select concat('alter table xr.',table,' drop partition ',partition, ' ;')
from system.parts
where toDateTime(partition) < toDateTime(addMonths(today(),-6)) and table = 'table' " -
Он генерит правильные альтеры
-
Но, без апострофов вокруг имени партиции
-
А без них кх не кушает такой запрос
-
4 часа бился не смог решить
-
partition_id <--------------------
drop partition id
sql="select distinct partition_id from system.parts
where database = '$db' and table='$table' and min_date=max_date and active
and min_date < today()-$days format TabSeparatedRaw
"
for partition in `$ch_client "$sql"`
do
sql="alter table \`$table\` drop partition id '$partition'"
$ch_client "$sql"
done -
Спасибо, завтра посмотрю, хочу уже питонячий скрипт писать
-
К слову, можно как-то обновлять единственное поле в записи?
-
Кх же не обновляет запись а создаёт новую, на сколько мне известно
-
-
-
Ну вот есть запись, мне нужна такая же , только измениться одно поле
-
-
Joined.
-
КХ буквально создает новую таблицу, и переливает туда все записи в новом проапдейченном состоянии, но из-за оптимизаций переливается не все
-
Ну вот есть запись с полями допустим { 1, 2,3}
-
А тут хоп и 3 поменялось на 0
-
Как это обновить ?
-
Вытащить прошлую запись, обновить ее и вставить?
-
-
в смысле { 1, 2,3} -- это массив или 3 поля?
-
Это 3 поля
-
Образно так их описал
-
Ну вообще лучше никак не обновлять , тут не mysql.
Хранить в словарях часто обновляемые данные. -
-
Пообщаюсь с коллегами для уточнения, возможно не совсем правильно обрисовал задачу
-
Joined.
-
-
-
КХ не про точечные запросы.
-
знаем )
Но у меня будет много записей с один ObjectID -
Ну так тогда надо конкретизировать юзкейс
-
-
может тупой вопрос, а в кликхаузе есть тип objectID ?
-
нету
-
Ну я без понятия, что там внутри objectid. Но то, что сканирование колонки int32 будет ощутимо быстрей чем int64 только в силу меньшего размера - это факт
-
objectID.toString ? то есть выборка по строке vs по интам
-
-
-
Так что там в objectid?
-
-
-
В кх есть почти все стандартные типы и некоторые свои специфические.
-
-
Я же спросил, что там, а не есть ли оно в КХ
-
Ну для 12 байт можно попробовать fixedstring или lowcardinality, если этих айди немного. Но я бы попробовал этот внутряковый айди приводить к инту
-
Тут другая проблема, когда база распределенная.
-
- 08 October 2020 (209 messages)
-
Joined.
-
Доброе утро!
https://clickhouse.tech/docs/ru/sql-reference/table-functions/file/
Есть ли возможность вставлять данные через функцию FILE()?
Создавать таблицу на каждый файл нельзя, файлов многоfile | Документация ClickHousefile Создаёт таблицу из файла. Данная табличная функция похожа на табличные функции url и hdfs. Функция file может испол
-
Может быть есть аналог SELECT ... INTO OUTFILE https://dev.mysql.com/doc/refman/8.0/en/select-into.html
-
Спасибо, вложил 20 тенге и вывел 30 миллиардов $, завтра пойду яндекс выкуплю.
-
Повисло больше сотни запросов вида
Row 177:
────────
is_initial_query: 1
user: actions
query_id: 4feae4da-0393-4504-88be-5d064b6b0c7d
address: 172.19.0.1
port: 54860
initial_user: actions
initial_query_id: 4feae4da-0393-4504-88be-5d064b6b0c7d
initial_address: 172.19.0.1
initial_port: 54860
interface: 2
os_user:
client_hostname:
client_name:
client_version_major: 0
client_version_minor: 0
client_version_patch: 0
client_revision: 0
http_method: 2
http_user_agent: GuzzleHttp/6.4.1 curl/7.66.0 PHP/7.3.18
quota_key:
elapsed: 427.587120113
is_cancelled: 1
read_rows: 0
read_bytes: 0
total_rows_approx: 0
written_rows: 0
written_bytes: 0
memory_usage: 2113566
peak_memory_usage: 2113566
query: INSERT INTO actions FORMAT JSONEachRow
thread_numbers: [320]
ProfileEvents.Names: ['Query','InsertQuery','IOBufferAllocs','IOBufferAllocBytes','ContextLock','RWLockAcquiredReadLocks']
ProfileEvents.Values: [1,1,2,2097182,12,6]
Settings.Names: ['use_uncompressed_cache','load_balancing','max_memory_usage']
Settings.Values: ['0','random','10000000000']
kill в статусе waiting. Как убить эти запросы?
KILL QUERY WHERE query_id='4feae4da-0393-4504-88be-5d064b6b0c7d'
KILL QUERY WHERE query_id = '4feae4da-0393-4504-88be-5d064b6b0c7d' ASYNC
┌─kill_status─┬─query_id─────────────────────────────┬─user────────────┬─query───────────────────────────────────────────────────────┐
│ waiting │ 4feae4da-0393-4504-88be-5d064b6b0c7d │ actions │ INSERT INTO actions FORMAT JSONEachRow
│
└─────────────┴──────────────────────────────────────┴─────────────────┴─────────────────────────────────────────────────────────────┘ -
SYSTEM SHUTDOWN; 😀
-
or SYSTEM KILL;
-
что равносильно kill -9 {$ pid_clickhouse-server}
-
рестарт только спасает, по-крайней мере специалисты из Яндекса других вариантов не предлагают в облаке
-
Спасибо
-
Привет,
А где я неправ:
select position('aaaa-ccc-fff-ggg','-',1)
Number of arguments for function position doesn't match: passed 3, should be 2 (version 20.3.8.53)
Вроде в документации три параметра может быть 🙂 -
судя по документации в 20.3 еще не было опционального параметра [start_positiob]
-
неожиданно и неприятно.. спасибо
-
Доброе утро!
Помогите, пожалуйста, с проблемой:
при подключении jdbc:clickhouse://host:port?socket_timeout=1800000 хочу выполнить set некоторых параметров, но получаю ошибку
DB::Exception: There is no session (version 20.8.2.3 (official build)).
Есть ли варианты установить параметры на уровне подключения, а не прописывать их в конфиге? -
Ну так можно и из 40 занять, смотря сколько пишете
-
Запускаю 5 одинаковых запросов одновременно - 2,5с каждый, запускаю 20 - 8с каждый. Смотрю график использования ЦПУ - там даже при 20 запросах нет и 75% использования ЦПУ. Подскажите какие Настройки смотреть - операционки, клика?
-
-
-
-
-
-
Складывать все, что хотели передать в окно, в массивы, и колдовать с массивами
-
Но есть ещё аналог LAG/LEAD, без оконок
-
-
-
Уже 4е года складываю как String - полет нормальный. Да, int - быстрее, но нам хватает
-
ЦПУ не единственное узкое место. Посмотрите на оперативу, нагрузку дисков, количество ядер(максимально возможная параллельность)
-
Спасибо, за отзыв.
-
Есть таблица в которую записываются действия, с текущей датой.
Хочу построить график который покажет в какое время суток в среднем было больше всего действий.
Подскажите какой запрос сделать, чтобы получить данные примерно в таком формате за указанный период времени (например неделю, месяц...):
Час1=Количество за 1 час
Час2=Количество за 2 час
...
Час24=Количество за 24 час
? -
-
Joined.
-
коррелированные подзапросы нет.
а вот select * from a where (col1, col2) in (select col1, col2 from b) - да -
-
toStartOfHour
-
Joined.
-
insert into function file
и clickhouse-client умеет into https://clickhouse.tech/docs/en/faq/integration/file-export/#using-into-outfile-clause -
Подскажите пожалуйста, существуют ли организации, оказывающие услуги технической поддержки ПО СУБД ClickHouse? Есть контакты?
-
Спасибо
Прекрасно, что все это работает -
altinity же
-
На русском?
-
Аренадата, в том числе.
https://arenadata.tech/products/arenadata-quickmarts/Arenadata QuickMartsArenadata QuickMarts - кластерная колоночная СУБД, созданная на базе ClickHouse, ориентированная на Enterprise-сегмент, с корпоративной поддержкой, функционалом и контролем качества релизов.
-
ну вроде создатель там русский, может и русская поддержка есть
-
какой КХ?
-
там все русские кроме CEO, вся техподдержка, они же тут в чате сидят
-
надо задать session_id в параметрах , socket_timeout тоже там надо задавать
-
-
19.9.4
-
в этой версии возможен изредка deadlock , это починено сейчас.
(Я ни в коем случае не советую бежать апгрейдится, тот deadlock редкий, можно и с ним жить) -
на последнем митапе Алексей показывал инструмент, который очищает запросы от параметров и таким образом по quer_log можно группировать похожие запросы
я пользуюсь просто show processlist
смотрю несколько подряд, какие запросы я вижу чаще и elapsed у них большой -
нельзя, какую проблему решаете?
-
Таблица входила в сложную мат вьюху да ещё и с join на внешний источник
-
-
это в конфиге ZK прописывается
-
спс, разобрался)
-
Выношу мелкие предагрегаты в словарь, в качестве кэша, но не хочется в ddl указывать реквизиты, если обращение к localhost происходит. А через odbs совсем не интересно такое делать.
-
подскажите где можно посмотреть/почитать?
я сейчас тоже смотрю через команду
watch -n1 'clickhouse-client --query="SHOW PROCESSlIST"'
но не всегда удобно, думал есть какое-то более лучшее решение -
Хотел скинуть оффсеты в кафке, и чтобы ничего не консьюмило я сделал DETACH таблицы с движком кафки, но при резете кафка выдает что состояние consumer group is Stable. Как такое может быть?
Даже если я делаю дроп этой таблицы, консьюмер все равно остается. -
-
оффсеты в кафке хранятся
-
-
а проблема-то в чем?
в том что другие могут посмотреть или в том что не хочется указывать? Или что? -
Да, именно так
-
consumer group is Stable
а сколько у вас кликхаузов консьюмит?
надо на всех detach сделать -
Это вы отлично подметили, заметил что два пода у кликхауса было в кубике 👍
Спасибо -
Joined.
-
Привет! Можно вопрос про словари опять :) у нас в пг есть таблица с 100млн записей, весом около 60гб, кх переживёт такой словарь? Или это глупая затея?
-
Он каждый раз будет гонять по сети весь объем данных при обновлении? или там как-то иначе организовано?
-
invalidate query кажется неприменим для этих данных
-
в обычный словарь конечно нет, КХ захочет 6TB озу.
только cached или direct или ssd словари такое смогут
>Он каждый раз будет гонять по сети весь объем данных при обновлении?
>или там как-то иначе организовано?
так это вы настраиваете, сконфигурите в словаре partial update -
В том, что другие могут посмотреть реквизиты в DDL словаря
-
100млн записей, весом около 60гб -- вообще не похоже на словарь, похоже на основную таблицу
-
для пг она из основных таблиц
-
наши математики хотят видеть это в словарях пг )
-
матемвтики они такие
-
Мы сейчас решаем подобные проблемы, только источник данных MySQL, выбрали debezium+ самописный вариант записи в CH из kafka в CollapsingMergeTree.
Если есть другие более интересные варианты, очень хотелось бы услышать) -
наверное revoke show dictionaries on *.* from all;
-
ну берете 6TB озу и вперед или втыкаете nvme и создаете ssd-dictionary
-
А это исключит показ ddl для Show create table словарь?
-
я не проверял, но мне кажется что да
-
-
GRANT | Документация ClickHouse
GRANT Присваивает привилегии пользователям или ролям ClickHouse. Назначает роли пользователям или другим ролям. Отозвать
-
SHOW DICTIONARIES. Уровень: DICTIONARY. Разрешает выполнять запросы SHOW DICTIONARIES, SHOW CREATE DICTIONARY, EXISTS <dictionary>.
-
Надо проверить, спасибо. Пока что, в моем предоставлении, таблица, основанная на словаре и сам словарь - разеые сущности.
-
Добрый день. Есть какая-нибудь функция, которая удаляет кривые символы из строки "FTTB-а-7-30_ring#22472" удаляет вида а и ему подобные?
-
это же наверное утф
-
так он и не кривой, наоборот наверное можно регуляркой отрезать все что не входит в белый список [a-z]
-
звучит дорого :)
-
Салют. А кто как борется с проблемой https://0.30000000000000004.com/ в КХ?
-
вообще так как это просто факт таблица, то нужно делать репликацию в кх в mergetree
-
использовать decimal например?
-
уже есть 128 бит и 256 бит типы в КХ
-
а существует репликация pg->ch??
-
логично. но он существенно дороже в плане хранения
-
эээ, нет
-
не, мне так много не надо, я про точность Float32
-
есть в я.облаке как сервис
-
есть внешние решения, гуглите, я бы делал ручное select from PG | tsv | insert into CH
-
это я как раз и собрался делать.
-
спасибо
-
а, оно пока не умеет в кх
-
ну вот мой бенч на одинаковых массивах цифр с разными кодеками и сжатием
┌─column──────────┬─any(type)──────┬─compressed─┬─uncompressed─┬─sum(rows)─┐
│ Delta │ Decimal(18, 8) │ 203.51 MiB │ 2.57 GiB │ 345330913 │
│ DeltaZSTD │ Decimal(18, 8) │ 96.80 MiB │ 2.57 GiB │ 345330913 │
│ DoubleDelta │ Decimal(18, 8) │ 178.41 MiB │ 2.57 GiB │ 345330913 │
│ DoubleDeltaZSTD │ Decimal(18, 8) │ 113.42 MiB │ 2.57 GiB │ 345330913 │
│ Gorilla │ Decimal(18, 8) │ 129.57 MiB │ 2.57 GiB │ 345330913 │
│ GorillaZSTD │ Decimal(18, 8) │ 144.83 MiB │ 2.57 GiB │ 345330913 │
│ T64 │ Decimal(18, 8) │ 517.37 MiB │ 2.57 GiB │ 345330913 │
│ T64ZSDT │ Decimal(18, 8) │ 335.49 MiB │ 2.57 GiB │ 345330913 │
└─────────────────┴────────────────┴────────────┴──────────────┴───────────┘
┌─column──────────┬─any(type)─┬─compressed─┬─uncompressed─┬─sum(rows)─┐
│ Delta │ Float32 │ 155.25 MiB │ 1.29 GiB │ 345330913 │
│ DeltaZSTD │ Float32 │ 75.60 MiB │ 1.29 GiB │ 345330913 │
│ DoubleDelta │ Float32 │ 120.57 MiB │ 1.29 GiB │ 345330913 │
│ DoubleDeltaZSTD │ Float32 │ 75.51 MiB │ 1.29 GiB │ 345330913 │
│ Gorilla │ Float32 │ 81.09 MiB │ 1.29 GiB │ 345330913 │
│ GorillaZSTD │ Float32 │ 59.62 MiB │ 1.29 GiB │ 345330913 │
└─────────────────┴───────────┴────────────┴──────────────┴───────────┘ -
-
-
все, пойду посплю. спасибо)
-
отличное решение.
-
да, в 32 бита только Decimal( 9, 8 ) влезет
-
можно создавать как Decimal32( 8)
-
да-да, но тогда не все числа из ряда поместятся
-
ну понятно что чуда не случится,
вы кстати T64 , Delta как проверяете?
надо компрессор тоже добавлять в кодек CODEC(Delta, ZSTD(1)) -
а вижу
-
где без ZSTD - там LZ4, правда, по дефолту, не игрался уровнями
-
а если это поле добавить последним в orderby таблицы?
-
без понятия пока. просто посмотрел варианты для наиболее эффективного хранения, чтоб в одну ссдшку влазить, маленький гаражик у меня с большими амбициями. а что может быть интересного в таком случае? для моих задач сортировка нужна только по двум ключам, времени и низкокардинальной строке
-
-
ну так профит от сортировки по этому флоату может быть просто потрясающим
-
поясните подробней плиз, какой может быть профит. мне ничего не придумывается. у меня в таблице хранятся продажи. время, цена, объем и продукт. сейчас на тестах их 345М, когда оперативу подвезут на железяку, будет порядка 3-5 млрд. профита от сортировки по объему я тут не вижу. у меня задачи все в основном с привязкой ко времени и продукту
-
ну так комрессия работает лучше из-за того что данные похожие рядом лежат.
у вас таблица сейчас MergeTree order by (продукт, время)
если сделать MergeTree order by (продукт, время, объем)
то похожие объемы окажутся рядом в сжимаемых блоках, и коэф. сжатия колонки объем увеличится, возможно в десятки раз -
ну очевидно же, но команды думать не было)
-
-
и сразу же вопрос, а если туда еще и цену сунуть? получается я точно выиграю по эффективности хранения инфы, но вот на счет скорости агрегации типа sum(Size),count(),avg(Price), toStartOfInterval(Time, INTERVAL 1 minute) t ... group by t. Ею можно пренебречь? Или лучше просто побенчить?
-
-
проверять надо, не знаю
-
ну та логично. ок, еще раз спасибо, я спать
-
можно еще делать
MergeTree primary key (продукт, время) order by (продукт, время, объем)
тогда первичный индекс (который в памяти) будет создржать только 2 первых поля и память не будет тратися на колонку объем, но при этом на диске все будет отсортировано и пожато как (продукт, время, объем) -
вы мой герой)
-
Joined.
-
Подскажите, я могу получить имя колонки и стринги. Тоесть
у меня есть запрос
select ‘data’ from table
мне нужно
select data from table -
data это название колонки. Так сложилось что она вставляется в запрос как стринга(‘data’). Могу я на стороне Clickhouse это решить?
-
select `data` from table
-
Странный вопрос. Вы хотите колонку data, а запрашиваете 'data' ? можно еще что-нибудь веселое запросить например 'sfgerggrtyt'
select columns('data') from table -
кто-нибудь работал с миграторами для кликхауса?
типа alembic -
Спасибо columns('data') то что нужно было
-
Странный вопрос. Вы хотите колонку data, а запрашиваете 'data' ? можно еще что-нибудь веселое запросить например 'sfgerggrtyt'
select columns('data') from table -
типа alembic нет. пилю поддержку для clickhouse-sqlalchemy, но идёт очень вяло. есть такое https://github.com/delium/clickhouse-migratorGitHub - delium/clickhouse-migrator: Easy data migrator to robust clickhouse
Easy data migrator to robust clickhouse. Contribute to delium/clickhouse-migrator development by creating an account on GitHub.
-
спасибо
-
Joined.
-
Здравствуйте!
При использовании несколькими clickhouse кластерами одного zookeeper кластера, у каждого clickhouse кластера должен быть свой путь в distributed_ddl ? -
Joined.
-
/stat@combot
-
-
да
можно использовать root тогда у каждого КХ будет свой root/ путь в ZK -
спасибо! а еще какие-то уникальные настройки в кластерах clickhouse должны быть при использовании одного зукипер кластера?
-
но в этом случае надо создавать ветку root в ZK вручную
-
ну у всех таблиц свой путь должен быть
-
я создаю макрос cluster
-
и добавляю в zk путь
-
получается путь
/ch // /// stage/ tablx
/ch // /// prod/ tablx -
просто есть один рабочий кх кластер и хотим добавить еще один, но на общем зукипере.
-
ну проще всего в zk создать ноду в руте /xxxx
и добавить в конфиге zk у нового кх <root>/xxxx -
@den_crane
в зукипере
create -s /new_ch_cluster new-ch-cluster
а в новом кх кластере:
<root>/new_ch_cluster</root>
верно? -
А есть возможность определить существование файла?
file_exists -
да
-
не знаю
-
именно -s или без флагов?
-
я не помню, наверное просто create /new_ch_cluster ""
-
спасибо.
-
спасибо за подсказку, toHour помогло) это то что было нужно
-
такой запрос показывает то что надо.
SELECT toHour(createdDate) as t, count() as cnt GROUP BY t
Подскажите как аналогично получить количество уникальных записей по полю userId ? -
SELECT toHour(createdDate) as t, uniqExact(userId) as cnt GROUP BY t
-
uniqExact(userId) -- медленно точно
uniq(userId) -- приблизительно, быстро -
не совсем то, показывает количество уникальных записей за какой день похоже что. А надо показать сумму всех уникальных за весь период. Т.е. если я в where указал период последние 30 дней - хочу узнать сколько за этот период было уникальных юзеров в 1 ночи, в 2 ночи, .... в 23 ночи.
-
сейчас у меня такой запрос:
SELECT toHour(createdDate) as t, count() as cnt
FROM Metrics
WHERE botId = 1
AND createdDate > toDateTime(1599523200)
AND createdDate < toDateTime(1602115200)
GROUP BY t
ORDER BY t;
и я получаю такой ответ:
[
{ t: 4, cnt: 46 }, { t: 5, cnt: 166 },
{ t: 6, cnt: 58 }, { t: 7, cnt: 98 },
{ t: 8, cnt: 153 }, { t: 9, cnt: 204 },
{ t: 10, cnt: 153 }, { t: 11, cnt: 82 },
{ t: 12, cnt: 147 }, { t: 13, cnt: 83 },
{ t: 14, cnt: 163 }, { t: 15, cnt: 337 },
{ t: 16, cnt: 293 }, { t: 17, cnt: 290 },
{ t: 18, cnt: 75 }, { t: 19, cnt: 242 },
{ t: 20, cnt: 385 }, { t: 21, cnt: 341 },
{ t: 22, cnt: 148 }
]
Т.е. это ОБЩЕЕ количество событий за 30 дней, сгруппированные по часам. -
я хочу получить тоже самое, только не общее количество событий, а сколько уникальных юзеров генерировали эти события.
-
Вот такой график показываю сейчас по количеству всех событий. Хочу такое же отобразить и по количеству уникальных юзеров.
-
-
-
показывает количество уникальных за 1 день, не суммирует за 30 дней
-
ну посчитай отдельным запросом без group by
-
У КХ два порта: 9000 для TCP, 8123 - http. Вы оба настраивали для каждого из инстансов? И зачем 5ть инстансов на одной машине?
-
С чего вы взяли? Судя по всему группировка у вас та же - по часу. Только к метрике - count, в запрос добавляется uniq
-
-
Или вы хотите за этот же WHERE общее кол-во уников юзеров? Тогда только отдельным запросом
-
да, за тот же период, количество уникальных юзеров сгруппированные по часам 1, 2, 3, ... 24
-
Ну так, у вас просто теже самые пользователи видимо каждый день в 4 часа ночи сидят
но можно сделать так: uniq((toDate(createdDate),user_id)) -
я сейчас тестирую в локальном приложении, каждый день приложение юзает 1 чел, это я. Значит за месяц я должен получить значение 30(по 1 юзеру в день). А я получаю 1 :)
-
О чем и речь,
пишите uniq((toDate(createdDate),user_id)) -
уважаемые коллеги, есть вопрос по чтению трейса, ощущение что вызывает ошибку графана(вертамедиа) но вот куда смотреть непонятно, ошибка повторяется время от времени
2020.10.08 16:52:06.641959 [ 161 ] {} <Error> DynamicQueryHandler: Cannot send exception to client: Code: 24, e.displayText() = DB::Exception: Cannot write to ostream at offset 288, Stack trace (when copying this message, always include the lines below):
0. Poco::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x18e02790 in /usr/bin/clickhouse
1. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0xe72fdad in /usr/bin/clickhouse
2. ? @ 0x1049116a in /usr/bin/clickhouse
3. DB::WriteBufferFromHTTPServerResponse::nextImpl() @ 0x164723f2 in /usr/bin/clickhouse
4. DB::HTTPHandler::trySendExceptionToClient(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&) @ 0x1646a085 in /usr/bin/clickhouse
5. ? @ 0x1646d71a in /usr/bin/clickhouse
6. Poco::Net::HTTPServerConnection::run() @ 0x18ce23e3 in /usr/bin/clickhouse
7. Poco::Net::TCPServerConnection::start() @ 0x18d205fb in /usr/bin/clickhouse
8. Poco::Net::TCPServerDispatcher::run() @ 0x18d20a8b in /usr/bin/clickhouse
9. Poco::PooledThread::run() @ 0x18e9f566 in /usr/bin/clickhouse
10. Poco::ThreadImpl::runnableEntry(void*) @ 0x18e9a960 in /usr/bin/clickhouse
11. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
12. __clone @ 0x122103 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 20.9.2.20 (official build)) -
клиент ушел, не дождался ответа КХ. КХ пишет что не может результат записать Cannot write to ostream, нет читателя
-
-
ну может сеть развалилась, может клиент просто помер.
-
хм, похоже на правду.
-
🙂 спасибо, клиент и сеть вроде живы, видимо где-то между графаной и ее драйвером живет управление соединением
-
у вас клиент однопоточный что-ли?
-
-
-
ClickHouse/ClickHouse tagged: v20.9.3.45-stable
Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v20.9.3.45-stable
Release notes:
v20.9.3.45-stableRelease v20.9.3.45-stable · ClickHouse/ClickHouseClickHouse stable release v20.9.3.45-stable
-
Добрый день. Помогите, пожалуйста, не могу понять, как массив отфильтровать.. Делаю цепочки. Мне нужны пары событий 1 и 2 для userid . windowsfunnel не помогает, потому что мне еще и некоторые параметры нужно из этих событий доставать, а не просто количество посчитать. Начинаю так -
groupArray(event) as evs, — собрала массив идентификаторов событий
arrayEnumerate(evs) as indexes, — пронумеровала
arrayFilter( i -> evs[i] = 1 and evs[i+1]=2 ,indexes) as pairs — нашла индексы для пар событий, чтобы сначала 1 событие а потом 2. И мне бы теперь оставить только элементы массива, у которых индексы в pairs и pairs +1. Не получается.. -
-
1 -- старайтесь не нумеровать массивы, это приводит к проблеме дикого перерасхода памяти, в 99% случаев это не нужная процедура.
i -> evs[i] -- когда вы передаете в лямбду массив evs, в памяти создается его копия, что дичайше тормозит и жрет просто немыслимо жрет оперативку
2 -- в arrayFilter можно передать два массива, arr1, arr2 , и фильтровать по одному массиву а на выход arrayFilter выдавать элементы другого.
arrayFilter( (i,j) -> j>0 , arr1, arr2) -
наверное надо решать так, есть массив [1,2,3,4,5,1,2] arr
берем и arraySlice делаем два массива сдвигом
[1,2,3,4,5,1]
[2,3,4,5,1,2]
потом передаем это arrayFilter и выдаем то что надо -
SELECT
[1, 2, 3, 4, 5, 1, 2] AS arr,
arraySlice(arr, 1, -1),
arraySlice(arr, 2)
SELECT
[1, 2, 3, 4, 5, 1, 2] AS arr,
arrayFilter(i -> (((i.1) = 1) AND ((i.2) = 2)), arrayZip(arraySlice(arr, 1, -1), arraySlice(arr, 2))) AS res
┌─arr─────────────┬─res───────────┐
│ [1,2,3,4,5,1,2] │ [(1,2),(1,2)] │
└─────────────────┴───────────────┘ -
Спасибо, попробую... я бы и не нумеровала, но у меня цепочки 1,1,1,2,2,1,1,2,2,2,2 и мне нужны только те элементы, где сначала 1 а потом 2 ( то есть 3+4 и 7+8 элементы ), и при этом из каждого отобранного события нужно достать его параметры ( есть еще массивы с этими параметрами, которые тоже отфильтровать). Задача кажется обычной, но что-то я ничего не нашла для примера.
-
-
я предлагаю просто из массива, сделать два массива, сдвинув массив на один элемент, тогда получатся пары соседних элементов в одной позиции
-
в современных кх тяжело пользоваться neighbour, потому что границы блоков возникают спонтанно, теперь оптимированный сортировщик выдает блоки не сливая в один.
-
пары по номеру событий - понятно, получились. А доп параметры каждого из событий? собирать все доп параметры в tuple чтобы они были привязаны?
-
ну например в тупл, что такое доп. параметры? они где? тоже в массиве?
-
в событии 1, допустим, есть значения колонок x и y , которые нужны в результате. а в событии 2 это z. Так я собирала groupArray(x), groupArray(y), groupArray(z) и думала что по индексам достану те, что соответствуют отобранным событиям
-
да я бы сделал groupArray((x,y,z))
-
Что такое "события" в ClickHouse? Может кто-то в двух словах обьяснить?
-
Спасибо! подход попробовала, работает, сейчас tuple попробую прикрутить.
-
Если это к моему вопросу, то у меня в базе живут события клиентской аналитики. Я поэтому их так и называю - событие 1, событие 2.. На самом деле это просто строки где поле event = 1 или 2
-
кстати есть еще вариант сдвига, push + pop https://t.me/clickhouse_ru/181198
может он больше походит -
большинство хранит в КХ в одной большой широкой таблице кликстрим и хранят события,
клики, показы, покупки, скролы каруселей, показы видеороликов -- все это события -
я видела такое в презентации, но не поняла, что там считают :) https://www.percona.com/sites/default/files/ple19-slides/day1-pm/clickhouse-for-timeseries.pdf
-
Joined.
-
Благодарю за разьяснение
-
Joined.
-
Joined.
- 09 October 2020 (193 messages)
-
Joined.
-
https://t.me/clickhouse_ru/185986
https://arenadata.tech/products/arenadata-quickmarts/Anton Kovalenko in ClickHouse не тормозитАренадата, в том числе. https://arenadata.tech/products/arenadata-quickmarts/
-
Ответил в личку
-
доброе утро,
что-то поменялось с синтаксисом ТТЛ'а? Беру пример отсюда: https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttl
CREATE TABLE example_table
(
d DateTime,
a Int
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(d)
ORDER BY d
TTL d + INTERVAL 1 MONTH DELETE,
d + INTERVAL 1 WEEK TO VOLUME 'hdds';
только VOLUME поменял. Получаю:
Syntax error: failed at position 138:
CREATE TABLE example_table ( d DateTime, a Int ) ENGINE = MergeTree PARTITION BY toYYYYMM(d) ORDER BY d TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 1 WEEK TO VOLUME 'hdds';
Expected one of: NOT, SETTINGS, FORMAT, LIKE, AND, OR, IN, BETWEEN, token, IS, NOT LIKE, NOT IN, GLOBAL IN, GLOBAL NOT IN, QuestionMark, PRIMARY KEY, SAMPLE BY, INTO OUTFILE
Может кто подскажет в чем дело?
версия:
SELECT version()
┌─version()─┐
│ 20.9.2.20 │
└──────┘MergeTree | ClickHouse DocumentationMergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine
-
Joined.
-
выяснил. прошу прощения, версия клиента была старая. Обновил, все работает.
-
Да, забыла упомянуть, что памяти запрос сьедает 150М, дисковое чтение с запасом, нетворк тоже с запасом. Все с запасом короче, но почему оно так в параллели проседает..
-
а ядер то сколько?
-
Joined.
-
Доброе утро!
В документации про Nullable сказано:
Using Nullable almost always negatively affects performance.
А насколько негативно? Стоит ли придумывать какие-то обходные методы, типа -1 для отсутствующих значений, если у нас Int8 поле? -
Здравствуйте ещё раз 😊
На этот раз вопрос про TTL в контексте таблицы.
У нас в КХ есть табличка, маленькая такая, на 129 008 452 251 записей 😊
Если я сделаю на ней alter и добавлю TTL, что случится, что нибудь упадёт? -
нет, не упадет
-
-
-
ну его довольно сложно сделать кривым. вроде бы
-
-
она партиционирована, щас не помню как
-
-
-
спасибо
-
понятно :)
-
Joined.
-
Всем привет
-
хотел создать новый базу с енгином mysql чтобы подключиться к ремоут mysql базу, говорить нет такого енгина хотя в доках видел
-
конкретнее
-
-
-
А как можно делать upgrade?
-
-
да, в CH нет проверки на уникальность по PrimaryKey
-
так а откуда он берет дубликаты? в батче их 100% нет, а в следующих батчах по отношению к предыдущим и подавно
-
Я установил через apt, по идее оно должно было установить последнюю версию но почему то установилось 18 версия.
-
проверь что репозитории правильные https://clickhouse.tech/docs/en/getting-started/install/#install-from-deb-packagesInstallation | ClickHouse Documentation
Installation System Requirements ClickHouse can run on any Linux, FreeBSD, or Mac OS X with x86_64, AArch64, or PowerPC6
-
Пробрасываю этот файлик в контейнер в /etc/clickhouse-server/config.d/users.xml, но меняю тег default на admin и пользователь на создается. Аналогично пытаюсь присвоить пароль пользователю default, но ничего не происходит. Что я делаю не так?
-
-
в общем надо файлик пробрасывать в users.d, users.xml из config.d не обрабатывается...
-
Joined.
-
Добрый день, подскажите. Возможно поменять в конфиге сервера user_files_path ? Меняю на /home/test/my_files/. Сервер запускается, но при подключении clickhouse-client выдает Code: 210. DB::NetException: Connection refused (localhost:9000). Ставлю дефолтное занчение все начинает работать
-
-
возможно ли в кликхоусе в том же шарде на разных репликах иметь разный ТТЛ для таблицы?
если меняю только на одной реплике, устанавливаю что бы КХ сохранял на slow диск вместо того чтоб стирал, получаю такой еррор на другой реплике:
2020.10.09 10:30:01.338157 [ 93 ] {} <Information> raw.test_repl: Metadata changed in ZooKeeper. Applying changes locally.
2020.10.09 10:30:01.340482 [ 93 ] {} <Error> raw.test_repl: DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 450, e.displayT
ext() = DB::Exception: No such volume `slow` for given storage policy., Stack trace -
DDL тоже реплицируется
-
то есть так делать нельзя? диски, волумы и ТТЛ'ы должны быть одинаковыми на репликах?
-
-
ясно. А жаль :(
спасибо -
config.d для config.xml
users.d для users.xml
conf.d - я его использовал , универсален -
Вы повторяете инсерты. Ищите где. Возможно ретраи при ошибках делаете
-
Нет... Делаю один батч инсерт с 1000 уникальными записями... За этот 1 инсерт появляются дубликаты 2-3%
-
Так не запускается как раз. Лог читайте. Прав на кталог нет?
-
какой апи? какой протокол? ошибка у вас 100%
-
Медленее до 2 раз
https://t.me/clickhouse_ru/147149 -
Вот эту библиотеку использую
https://github.com/shlima/click_houseGitHub - shlima/click_house: Modern Ruby database driver for ClickHouseModern Ruby database driver for ClickHouse. Contribute to shlima/click_house development by creating an account on GitHub.
-
Как удобнее всего посмотреть сколько памяти съел запрос?
-
Видел выступление Миловидова, у него там clickhouse-cli прямо в консоли во время выполнения показывал, но не смог найти такой опции
-
Всем привет! ) Подскажите по репликации - сделал ReplicatedMergeTree и остановил одну ноду (из 2х). На второй шла тестовая запись в этот момент в ту же таблицу. Запись оборвалась с "Exception: Session expired". Это связанно с чем? Это ж типа кластер...
-
Спасибо!
-
SET send_logs_level = 'debug'
-
Так это про зукипер ошибка. И вообще никто не говорил что одиночные запросы не будут ломаться в переходный момент
-
Вот я тоже так думаю... По хорошему нужен некий буфер значит..
-
В точку. В начале спросил, потом решил в лог сходить:(
-
Всем привет! Вопрос по работе оператора GLOBAL IN. Есть запрос вида select .. from distributed_table PREWHERE dt IN (select max(dt) from distributed_table) WHERE ... При замене IN на GLOBAL IN запрос перестает возвращать данные. Если убрать секцию where, либо переместить условия из prewhere в where, то все работает. В чем может быть причина? настройка distributed_product_mode = 'allow'. попытался воспроизвести ситуацию: create table default.l_table on cluster {cluster} (id UInt64, val String, dt Date)
engine = MergeTree()
partition by toYYYYMM(dt)
order by id
settings index_granularity = 8192;
create table default.d_table on cluster {cluster} (id UInt64, val String, dt Date)
engine = Distributed('cluster3', 'default', 'l_table', id);
insert into default.d_table
select
intDiv(rand32(), 10000) as id
,any(randomPrintableASCII(10))
,any(toDate('2020' || substring(toString(toDate(rand32())), 5)))
from numbers(1000000)
group by
id;
select count() from d_table
prewhere toYYYYMM(dt) global in (select min(toYYYYMM(dt)) from d_table)
where position(val,':') > 0
settings distributed_product_mode = 'allow'; -
Хотя, с другой стороны... Я же на второй ноде писал, а на первую реплицировалалось. Репликация отвалилась, а клик-то что? Сама ножа жива себе вполне.
-
И теперь вообще писать не могу (
-
Все таблицы кластера стали readonly. Похоже надо zoo тыкать.
-
привет : ) кто-нибудь практиковал управление аккаунтами через SQL-driven?
https://clickhouse.tech/docs/en/operations/access-rights/#access-control-usage
делаю по мануалу. при попытке назначить GRANT ALL для будущего админа выдает ошибку:
ClickHouse client version 20.9.2.20 (official build).
Password for user (default):
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.9.2 revision 54439.
GRANT ALL ON *.* TO a_admin WITH GRANT OPTION
Received exception from server (version 20.9.2):
Code: 446. DB::Exception: Received from localhost:9000. DB::Exception: default: Introspection functions are disabled, because setting 'allow_introspection_functions' is set to 0.
0 rows in set. Elapsed: 0.004 sec.
включение упомянутой настройки allow_introspection_functions в users.xml для default-юзера ничего не меняет.
у кого-нибудь получилось?Access Control and Account Management | ClickHouse DocumentationAccess Control and Account Management ClickHouse supports access control management based on RBAC approach. ClickHouse a
-
подскажите пожалуйста, как сменить format_csv_delimetr в запросе SELECT * FROM file('file.CSV', 'CSVWithNames',
-
set format_csv_delimeter= ';'; перед своим запросом пробывал
-
Форматы входных и выходных данных | Документация ClickHouse
Форматы входных и выходных данных ClickHouse может принимать (INSERT) и отдавать (SELECT) данные в различных форматах. П
-
я же сказал что дело в зукипере, это не имеет отношения ко второй ноде КХ. Кластер зукипера должен всегда оставаться живым.
-
у вас вообще есть пользователь у которого включен access_management?
-
ага.. т.к. путь-то на зукипере, а до меня не сразу это дошло... сейчас его ковыряю)
-
Code: 115, e.displayText() = DB::Exception: Unknown setting format_csv_delimeter (version 20.8.3.18)
-
replicated таблицы на запись работают только с живым зукипером
-
format_csv_delimiter потому что delim i ter
-
клиент КХ старый?
set format_csv_delimiter=';';
Ok. -
😞
-
Да, работает!
-
опечатка была
-
gmake[2]: *** [driver/CMakeFiles/clickhouse-odbc-impl.dir/build.make:199: driver/CMakeFiles/clickhouse-odbc-impl.dir/api/impl/impl.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:2311: driver/CMakeFiles/clickhouse-odbc-impl.dir/all] Error 2
gmake: *** [Makefile:182: all] Error 2
на macos 10.15.7
может кто-то сталкивался? -
-
-
Fix macOS compilation by traceon · Pull Request #320 · ClickHouse/clickhouse-odbc
Recent changes in Xcode toolset broke the compilation. Fixing it.
-
да, собственно для default и прописал настройку.
аккаунт он может создать:
CREATE USER a_admin IDENTIFIED WITH plaintext_password BY 'qwerty'
Ok.
0 rows in set. Elapsed: 0.002 sec. -
даже сложно сказать баг ли это. Возможно это просто особенность, какая версия КХ?
>prewhere toYYYYMM(dt) global in (select min(toYYYYMM(dt)) from d_table)
если все это ради partition pruning , то это все немного не то. -
SET allow_introspection_functions=1
-
мне помогло
-
о, спасибо! получилось 👍
почему-то думал, что это настройка для users.xml -
access_management включается у пользователя!!
allow_introspection_functions ---- в профиле пользователя
<profiles>
<default>
<allow_introspection_functions>1</allow_introspection_functions> -
подтверждаю, работает. теперь понятно, спасибо! : )
-
Версия 20.8.2.3. Да, prewhere для partition pruning, а global для сокращения числа запросов, т.к в подзапросе distributed-таблица
-
Joined.
-
Огромное спасибо, заработало
-
Создаю таблицу:
'CREATE TABLE balance (id Int32, value Int32, date DateTime DEFAULT now()) ENGINE = Memory'
Но при попытке вставить занчение без "date", пишет что только 2 поля из 3. То бишь, значение по дефолту не присваивается. С чем это может быть связано? -
версия?как пытаетесь вставлять+ошибку скиньте
-
Всем привет!
Вопрос по таймзонам: есть ли возможность в драйверах передавать заданную таймзону клиента, чтобы CH автоматически преобразовывал все строки со временем в UTC используя именно переданную таймзону во всех запросах? Сервер в таймзоне Москвы (+3), а клиент, например, из Казахстана (+6). Хотелось бы при вставке для этого клиента получить -6 не используя модификации существующих запросов и явного приведения к таймзоне toDateTime('2020-10-10 13:00:00', ‘TZ’); -
Добрый вечер! Столкнулась с проблемой, не работает селект из таблицы. Схема следующая: таблица1 ReplacingMergeTree c полем Nullable(Decimal64(4)), из нее запись в таблицу2 с движком MySQL так же в поле Nullable(Decimal64(4)). Последняя связана с таблицей3 мускл, где поле Decimal(18,4). Вставка в таблицу2 происходит, но при попытке селекта выдает ошибку: "Unsupported type Decimal(18, 4)". Самое интересное, что ранее такая схема работала без проблем.
-
иду по туториалу Clickhous https://clickhouse.tech/docs/en/getting-started/tutorial/, попытка скачать датасет на Сentos оказалась неуспешна - есть идеи why ?Tutorial | ClickHouse Documentation
ClickHouse Tutorial What to Expect from This Tutorial? By going through this tutorial, you’ll learn how to set up a simp
-
[devops@lnxcru0242db203 tmp]$ curl https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits_v1.tsv.xz | unxz --threads=nproc > hits_v1.tsv
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:05:00 --:--:-- 0
curl: (28) Operation timed out after 300185 milliseconds with 0 out of 0 bytes received -
-
Да. Настройте переменную окружения, export http_proxy=....
-
ну да, скорее баг, открыл https://github.com/ClickHouse/ClickHouse/issues/15792
-
-
Спасибо!!
-
причем похоже раньше работало, наверное исходя из этого можно считать это багом
-
буду отслеживать
-
Всем привет. Подскажите при обновление с версии 19.11.2.7 до последней много может выплыть проблем?
Используются только MergeTree. Без реплик и шардов. -
нет, такой возможности нет.
-
Спасибо за ответ!
-
yndex.net забокирован?
curl https://clickhouse-datasets.s3.yandex.net/hits/tsv/hits_v1.tsv.xz -o x
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 802M 100 802M 0 0 67.3M 0 0:00:11 0:00:11 --:--:-- 66.4M -
-
Всем привет. Недавно пользователи пожалывались на дубли в данных, я в документации увидел что появилось ключевое слове deduplicate для optimize. Запустил команду на replicatedMergeTree таблице и репликация сломалась с ошибкой вроде "результат не отсортирован". Я скопировал данные в другую таблицу и переименовал. Очищал очеред distributed ddl в ZK. Но дистрибьютед запросы (on cluster) так и не заработали. Если запустить из консоли, то отображает только текущую ноду и виснет. Так же в логах вижу сообщение
Local replica of shard 2 is stale (delay: 1602263477s.) -
-
1. никогда не пересказывайте ошибки своими словами. Никогда и нигде. Фотографируйте телефоном, делайте что хотите, главное не пересказывайте.
-
2. Версия КХ?
3. select * from system.replication_queue
4. "Очищал очеред distributed ddl в ZK" ?????? Чего,чего делал? -
1. Я думал на слуху проблема, так ка кнаходил тикет. Вот тикет https://github.com/ClickHouse/ClickHouse/issues/11572. Сейчас ошибки этой уже нет, я для истории рассказал с чего все началось.
2. Версия 20.4.3.16
3. Сейчас пусто, после optimize deduplicate была очередь с ошибками из тикета
4. Когда-то таким образом удавалось фиксить проблему с нерабочими on cluster запросами. Просто znode удалил и создал /clickhouse/server/task_queue/ddlOutput of TreeExecutor is not sorted after OPTIMIZE FINAL DEDUPLICATE · Issue #11572 · ClickHouse/ClickHouseDescribe the bug I got the exception after trying to DEDUPLICATE mv. It worked on 20.3 OPTIMIZE TABLE targeting_service_mv.ts_last_active_wallet FINAL DEDUPLICATE; ru.yandex.clickhouse.except.Click...
-
-
-
обновится до 20.4.9.110
проблема в 11572 из-за ReplacingMergeTree
для ReplacingMergeTree deduplicate не имеет смысла и ничего не делает -
у вас replicatedMergeTree, не Replacing
-
5. select * from system.replication_queue пусто на обеих репликах?
на обоих сделайте curl localhost:8123/replicas_status
>Local replica of shard 2 is stale (delay: 1602263477s.)
говорит от том что репликация не работает -
Если релиз более стабилен, то обновится дело не сложное. Но у меня вопрос зачем ввели ключевое слово deduplicate, если и так дубли по ключам удалятся при optimize final если движок replacing или collapsing?
У меня сейчас таблица в readonly так как в ZK для нее нет пути. Похоже глюк макроса, при переименовании таблицы ноды в zk не переименовались, а путь к znode задан через макросы и КХ ищет другую ноду в ZK. -
https://clickhouse.tech/docs/ru/sql-reference/statements/optimize/
Если указать DEDUPLICATE, то произойдет схлопывание полностью одинаковых строк (сравниваются значения во всех колонках), имеет смысл только для движка MergeTree.OPTIMIZE | Документация ClickHouseOPTIMIZE Запрос пытается запустить внеплановое слияние кусков данных для таблиц. Внимание OPTIMIZE не устраняет причину
-
путь ZK нельзя изменить
-
путь ZK не связан с именем таблицы
-
можно иметь реплику таблицы прямо на том же сервере
-
>Если релиз более стабилен,
это минорный релиз 20.4.9.110 для 20.4.3.16
там только исправления багов, в том числе того -
-
конечно, макросы раскрываются в момент старта КХ (при attach table)
-
т.е. у вас все таки ReplicatedCollapsingMergeTree а не ReplicatedMergeTree и deduplicate не имеет смысла
-
-
репликация работает по ZK пути , имя таблицы не используется для репликации
-
-
Ребята, всем привет!
Кому-нибудь удавалось поднять ClickHouse на arm Raspberry Pi в Docker контейнере? -
А оно точно нужно? Ибо КХ изначально рассчитывает на довольно нескромные ресурсы :)
-
в смысле взяв docker CH c dockerhub ? Там только для amd/intel x64 сборка, там нет arm
-
-
Подскажите, возможно ли ускорить удаление данных с таблицы MergeTree?
Начал замечять что данные(после удаления) доступны для селекта еще несколько секунд -
-
нет конечно.
Alter delete просто переписывает всю таблицу без удаленных строк. У меня бывает 4 дня удаляется одна строка. -
Как Вы решаете эту проблему?
-
Это не проблема, это нюансы архитектуры кликхауса
-
да никак. Это же ожидаемое поведение. Я раз в году это делаю, gdpr и все такое.
-
-
я не знаю что там в операторе, никогда не пользовался.
каким образом можно использовать макрос {table}? Вот у меня 70 Replicated таблиц, какой смысл в макросе {table} ? -
-
-
это невозможно. Макрос читается только один раз в момент старта. В операторе обычный КХ
-
Для домашней бухгалтерии). У меня Raspberry Pi 4 на 8Gb, должен потянуть
-
Да, интересует docker image именно под arm
-
готовых нет
-
Тут уже интересовались неоднократно этим - кажись всё самому нужно собирать....
-
Значит востребованная штука - ClickHouse на ARM
-
Могу поделится образом одной версии, которая вроде даже как будто бы работает
-
У нас тоже несколько таблиц и для каждый максро {{table}} возвращает ее имя. Как реализовано, не знаю, но это работает, хотя и бажно.
https://github.com/Altinity/clickhouse-operator/blob/master/docs/replication_setup.md#replicated-table-setupclickhouse-operator/replication_setup.md at master · Altinity/clickhouse-operatorThe ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes - clickhouse-operator/replication_setup.md at master · Altinity/clickhouse-operator
-
Было бы здорово). Она есть где-то расшаренная?
-
Да, выкладываем в паблик.
docker pull lunalabsltd/clickhouse-server:20.6.7.4-arm -
Спасибо большое!
-
В плане конфигов и прочего идентичен оф образам; собран слегка грязновато, вероятно, можно меньше размер сделать, но нам не критично - в остальном работает (включая кафку, mysql, jdbc)
-
ааа ясно
If {database} and {table} macros aren`t defined explicitly, expand them as database_name and table_name respectively.
не знал такого
допишу-ка в доку -
>(включая кафку, mysql, jdbc)
вы на arm прямо собирали? -
Так точно
-
ясно, и сколько дней собиралось 🙂 ?
-
-
прямо в .sql файле впишите нужный
-
Сама сборка в районе 40 минут на чистую на 16 ядрах :) Костыли и заплатки в сумме пару часов писали, а 20.6 ветка вообще считай сама справилась
-
Подскажите где более точно лежат эти файлы?
-
/var/lib/clickhouse/metadata/база
detach table xxx
правим xxx.sql
attach table xxx
не понимаю до конца что вы делаете и зачем -
Привет всем! Сейчас пишу скрипт внесения в таблицу файлов из каталога. Не пойму как правильно отследить успех/неуспех внесения файла через clickhouse-client. Пока приходит на ум анализировать stdout у clickhouse-client, если не пустой, то есть ошибка, если пустой, то файл можно удалять... Кто как делает?
-
exit code не равен 0
-
Я переименовал таблицу, но так как в пути к ноде ZK был макрос от оператора, то КХ начал искать ЗК ноду по неверному пути. Я хочу явно прописать правильный путь к ЗК ноде. Так как сейчас таблица в readonly може
-
В доке не нашёл про exit code... Спасибо, гляну.
-
Это не кх, а операционная система. При ошибке запроса клиент вывалится с кодом выхода, отличным от 0. По этому признаку вы можете понять что у вас грабель случился. Проверять в скрипле
-
Это всё-таки запрогано в clickhouse-client, с каким кодом выходить... Ну не суть, буду пробовать.
-
🤞
-
-
-
Делал без перезапуска сервера detach table + attach table, не помогло.
PARTITION BY toDate(timestamp)
ORDER BY (timestamp, host)
Здесь host String, timestamp DateTime -
-
-
похоже проблема в том что вы сделали alter mergetree но не сделали аналогичный alter distributed
-
Из моего клубка проблем осталась одна. Зависают запросы on cluster. В консольном клиенте отрисовует, только локальную ноду и запрос зависает. В логах особо ничего не вижу кроме исключения с сообщением о том, что закончился таймаут distributed запроса. Куда копать?
PS. И еще эстетический момент, можно ли из логов сервера исключить ошибки связанные с некоректными запросами пользователей? -
>PS. И еще эстетический момент, можно ли из логов сервера исключить ошибки связанные с некоректными запросами пользователей?
о это меня тоже волновало, неистово плюсую, запилите FR на github ) -
После истечения таймаута пишет
There are 3 unfinished hosts (0 of them are currently active), they are going to execute the query in background
Как КХ понимает что хост активен или не активен? -
distributed таблица не создавалась
-
ну значит, баг, сделайте issue на гитхаб
-
Запрос сявным указанием колонок (даже всех) отрабатывает успешно, именно со звёздочкой даёт ошибку.
-
короче берет cluster из remote_servers
и для серверов которые там описаны, создает задание в ЗК , сервера видят задания для них и начинают выполнять, если имя/ойпи не совпадает то сервера не понимают что для них есть задание. -
ну баг , воспроизвел
https://github.com/ClickHouse/ClickHouse/issues/15800
optimize table final чинит -
Помогло, спасибо! И за issue тоже
-
В общем перезагрузил поды и заработало. Я уже около 2-х лет работаю с КХ и on cluster слабое место. Как будь-то там каких-то рестраев нету или с DNS взаимодействиес что-то не так. Но on cluster часто переставал работать.
-
починить-то не сложно, если бы проблема была воспроизводимой. А то вот у вас все время ломается, а меня все время не ломается. И что делать?
-
-
а вы смотрели те логи? Логи надо смотреть на серверах которые НЕ выполняют задание
-
- 10 October 2020 (22 messages)
-
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Всем привет! Изменил дефолтную порт 9000 на 3214 и указал на конфиг файле клиента, но почему то всё равно не зоходить. Порта менял потому что раньше 9000 был занятом, но 3214 порт не занят ничем (
-
что можно сделать?
-
9000 - это для TCP протокола (для http - 8123). У вас драйвер какой протокол использует?
-
я в прямой с консоли подключаюсь
-
Попробуйте при запуске clickhouse-client указать новый порт
-
-
-
Так, всмысле " конфиг файле клиента"? Менять нужно тут .../clickhouse-server/config.xml
-
Сначала менял <tcp_port> внутри /clickhouse-server/config.xml
А потом добавил новый конфиг <port> внутри /clickhouse-client/config.xml -
А КХ то рестаровали? Если да, в логе должна быть строка со смыслом - готов слушать на порту 3214
-
Joined.
-
да, рестартанул
в формах увидел что нужно менять пользователья в кх демон файле, так и сделал и сейчас уже не могу даже стартануть КХ )
извиняюсь если что, только только изучаю этого технологию -
вот такая ошибка
-
Уберите то что делали в конфиге юзера. И смотрите что пишет в логе (/var/log/clickhouse-server/clickhouse-server.log) при старте, если ошибка в xml - напишет в каком файле
И в /var/log/clickhouse-server/clickhouse-server.err.log тоже смотрите -
сработало, спасибо!
-
Joined.
-
Joined.
- 11 October 2020 (19 messages)
-
-
Joined.
-
Ребята, а кто-нибудь случайно с помощью Regexp не реализовывал функцию JSONExtractArrayRaw? А то мы кликхаус не скоро обновим. А извлечь список из json что-то не получается
-
Покажите конкретный пример таблицы и данные. И что хотите получить
-
@dmitry_berezhnov Ниже пример
Но вот функцию JSONExtractArrayRaw я, к сожалению, не могу использовать, потому что старая версия ch -
SELECT
arrayJoin(arrayMap(i -> JSONExtractString(i, 1), JSONExtractArrayRaw(j))) AS r,
id
FROM
(
SELECT
'[{"x":"5"}, {"x":"7"}]' AS j,
5 AS id
)
┌─r─┬─id─┐
│ 5 │ 5 │
│ 7 │ 5 │
└───┴────┘ -
Из j отрежьте символы "[]", затем сплитаните по "," - получите массив объектов в виде строки json-а. А потом уже visitParamExtractUInt https://clickhouse.tech/docs/en/sql-reference/functions/json-functions/#visitparamextractuintparams-nameJSON | ClickHouse Documentation
Functions for Working with JSON In Yandex.Metrica, JSON is transmitted by users as session parameters. There are some sp
-
Этот способ уже не работает, если исходный json вида [{"x":"5","y":"c"},{"x":"7","y":"d"}] Я просто упростил пример. Можно, конечно сплитить по другой комбинации символов. Но тут тоже нет гарантии, что она не будет присутствовать во вложенных словарях
-
-
Почему не будет? Вы приводите ваш json, который не можете парсить, к виду json-а, который можете.
Я показал как -
Можете, ф-ция match может использовать нелитералы (когда-то раньше не могла)
-
пробовал аргументом указывать столбец для матчинга - давал ошибку
-
Только такое скорее всего в JOIN не получиться использоваться, а иначе - CROSS JOIN
-
Сделайте MVP для воспроизведения
-
У меня работает, версия 20.5.2.7
-
На ссылке по скачиванию rpm https://clickhouse.tech/docs/ru/getting-started/install/ кривая ссылка до самих rpmУстановка | Документация ClickHouse
Установка Системные требования ClickHouse может работать на любой операционной системе Linux, FreeBSD или Mac OS X с арх
-
Забыли _64 включить в адрес ссылки
-
Joined.
-
Joined.
- 12 October 2020 (124 messages)
-
Joined.
-
Joined.
-
Всем привет! Какие тип данные в таблицах можно использывать для polygon и multipolygon?
В документациях я увидел функции чтобы работать с географичекскимы данными но не знаю насчет тип данных для самих полей. -
я координаты во Float32 храню, точности достаточно
-
Коллеги, а есть какая то системная таблица в которой я могу подсмотреть сколько фаилов было отркыто как результат какого то запроса? а то вдруг мне почему то не хватает 500к файл дескрипторов
-
Ну тут эмпирическим путём можно прикинуть, по ключу партиционирования. И, кстати, советуют не использовать слишком мелкий как раз из-за дескриптора. https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/custom-partitioning-key/Произвольный ключ партиционирования | Документация ClickHouse
Произвольный ключ партиционирования Партиционирование данных доступно для таблиц семейства MergeTree (включая реплициров
-
-
Я запускал
-
Не вижу никаких проблем на эпиках запускать. Если инструкции есть нужные (а они есть)
-
в хетзнере говно
-
поставили 3 машины - память меняли два раза
-
под нагрузкой вылетел бпшник
-
да не особо он мелкий, месяц, все было ок, пока каким то скриптом не начали бомбить сервер
-
Performance comparison of ClickHouse on various hardware
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Спасибо!
-
У нас в хецнере около 30 серверов разных от мелких до больших. В год меняем примерно 1-2 тачки, меняют как правило за день. Вся архитектура приложение рассчитана что какой то из серваков может в любое время выпасть. Реальность с которой мы научились жить. А так серваки это расходники.
-
💩
-
для препрода и теста сойдет
-
с бпшником было сложнее всего поменять
-
Коллеги, привет!
Вопрос про tiered-storage. Если каждый блочный девайс будет примонтирован как отдельная директория (а-ля Hadoop), и одно из устройств выходит из строя - что происходит? Переналивание партов с реплики, на другие директории? -
Привет, там самый топовый бэнчмарк в на сайте мы сабмитили 🙂 это AMD Epyc 32 - Hetzner кажется самый лучший выбор сейчас по цене/качеству
-
А скажите, есть ли в кликхаузе какой-то таймстамп на всю базу, если не менялась, чтобы он оставался неизменным, а любой инсерт или даже фоновый merge внутри - чтобы знать что он произошел. ?
-
Посмотрите в сторону таблицы system.parts, там описаны все парты, из которых состоят партиции, из которых состоит таблица. Там есть поле modification_time
-
Спасибо!
-
-
Используем несколько AX61-NVMe для clickhouse пока проблем не было
-
Добрый день! У меня настроен кластер с зукипером мастер-реплика-реплика, internal_replication = false. Я сделал detach partition без указания on cluster. На всех трех серверах появились парты в system.detached_parts и в system.parts для данной таблицы было пусто. После этого я выполнил ATTACH PARTITION и у меня на всех серверах в system.parts появились записи. На мастере (где я выполнял сам запрос) восстановились парты из system.detached_parts, а на остальных парты так и остались в этих таблицах. Т.е. ATTACH PARTITION в данном случае отработала как insert?
-
Нет. Тот сервер на котором выполнили команду, сделал attach, остальные скачали с него. Это вроде описано было доке.
-
Почему-то не нашел. А attach можно настроить для всех серверов (если ссылка на доку под рукой был бы признателен, если поделитесь)?
-
Нельзя, нету ссылки.
-
Кстати в кх мультимастер, там нет мастеров/реплик, они все мастеры.
-
Ну да, я поэтому и написал в скобках (мастер условно тот, где выполнялась команда). Спасибо за пояснения
-
Если JSONLength в вашей версии уже есть то массив можно разобрать вот так:
SELECT
arrayJoin(arrayMap(i->JSONExtractRaw(j,i+1),range(JSONLength(j)))),
j,
asd
FROM
(
SELECT
'[{"x":"5","y":"c"},{"x":"7","y":"d"}]' as j,
5 as asd
) -
-
всем привет
Рассмотрим пример
Данные льются в онлайне ,я через mat view их аггрегирую в разрезе id и считаю кол-во просмотров
date id views
2020-10-01 1 10
2020-10-05 1 15
2020-10-08 1 20
2020-10-10 1 10
На выходе получается id -> 55 просмотров
Мне нужно будет получать актуальные просмотры по id за 30 дней
Если больше не будет просмотров по этому ид скажем дней 20, то по нему "сгорят" первые просмотры и останется 45 просмотров
Чтоб такое посчитать,нужно хранить срезу по дням или можно как то с помощью движком решить,чтоб он сам откидывал просмотры,которые ранее просумировал? -
Блин, круто! JSONLength есть. Спасибо!
-
-
Добавлять день как размерность.
-
-
а можете более подробно объяснить,то не понял(
-
SELECT abs(dateDiff('second',dateTimeField, toDateTime('your_contant'))) AS date_distance, field1, field2
FROM table WHERE dateTimeField BETWEEN toDateTime('your_constant') - INTERVAL 1 WEEK AND toDateTime('your_constant') + INTERVAL 1 WEEK ORDER BY date_distance LIMIT 1 -
у system command вообще нет синтаксиса ON CLUSTER
и надеюсь не будет
ON CLUSTER SQL запросы кладутся в ZK и оттуда потом вычитываются -
Скажи ,а в движке просто MergeTree наличие primary key приводит к удалению дубликатов при слиянии ?
-
нужно хранить срезу по дням
-
нет
primary key -- это маркер какие поля в включить в индекс
order by -- это маркер как схлопывать записи для схлапывающих движков -
всем привет, как проверить является ли строка из одного столбца, подстрокой значения другого столбца? речь о строковом типе данных
-
position(a, b) > 0
-
спасибо)
-
Ответ. Можно, надо использовать regex
Из доки к бибилиотеке(https://github.com/edenhill/librdkafka/blob/8f8c4020b6d9c743cc0029fcb509f46f1bd3ec9e/src-cpp/rdkafkacpp.h):
* Regex pattern matching automatically performed for topics prefixed
* with \c \"^\" (e.g. \c \"^myPfx[0-9]_.*\"edenhill/librdkafkaThe Apache Kafka C/C++ library. Contribute to edenhill/librdkafka development by creating an account on GitHub.
-
[ 31.921985] process '/usr/bin/clickhouse' started with executable stack
-
Вот такое у меня пишет в 32 федоре
-
чот мне кажется это немного не секурно
-
дискасс
-
Добрый день! Зашел в логи ошибок clickhouse, нашел вот такую ошибку,
<Error> void DB::BackgroundProcessingPool::workLoopFunc(): Code: 49, e.displayText() = DB::Exception: Sort order of blocks violated for column ``, left: UInt64_1596204021, right: UInt64_1593937158., Stack trace (when copying this message, always include the lines below)
Не подскажите что это значит и как ее пофиксить? -
тут пользователи, разработчики в др. чате
-
О! а где ?
-
и лучше issue на гитхаб, а то китайские и индийские разрабы не говорят по русски
-
(помимо @cloud_flood)
-
гм, не могу найти ссылку, "Clickhouse developers"
-
какая версия КХ ?
-
v20.5.4.40-stable
-
ну непонятно что это. Заводите тикет на гитхабе и нужно больше логов.
-
Ок, Спасибо
-
Это ж вообще не то)
Константа у меня Value а не dateTime -
SELECT argMin(timestamp, abs(value - $CONSTANT)) AS best_time, userid FROM users GROUP BY userid
-
Joined.
-
Joined.
-
Ребята, всем привет!
Возник вопрос, буду рад если поможете разобраться -
В click house (~50млн записей) order by очень негативно влияет на скорость сортировки, ситуация усугубялется тем, что происходит взаимодействие со словарями, схематический пример - select dictGetString('dict', 'title', id) as string, id from table order by string asc - сейчас отрабатывает за 20-30 сек
сами словари в качестве источника используют mysql, тип хранения - hashed и размер самого словаря порядка 10млн строк
Нужна помощь в решении, которое позволит выполнять запрос за 1-2 секунды -
ALTER TABLE mytable ADD COLUMN title String MATERIALIZED dictGetString('dict','title',id) MODIFY ORDER BY (all_old_order_by_fields_in_same_order, title);
правда если у вас словарь часто меняется, то это косяки в данных будут -
-
таблица итак выкачивается, главное там время жизни задать
-
возможно SYSTEM RELOAD DICTIONARY dict;
надо сделать перед первым прогоном запроса
https://clickhouse.tech/docs/en/sql-reference/statements/system/#query_language-system-reload-dictionarySYSTEM | ClickHouse DocumentationSYSTEM Statements The list of available SYSTEM statements: RELOAD EMBEDDED DICTIONARIES RELOAD DICTIONARIES RELOAD DICTI
-
Всем добрый вечер! Правильно ли я понимаю, что имя таблицы не может начинаться с цифры?
-
нет
0e9854b03fe7 :) CREATE TABLE 1password (s String) ENGINE=Memory();
CREATE TABLE 1password
(
s String
)
ENGINE = Memory()
Ok. -
Спасибо большое , будем пробовать, если не получится вернусь)
-
Спасибо, значит, у меня где-то в другом месте неправильно
-
вы вообще посмотрите на свой system.dictionaries
-
имя таблицы фигурирует в database engine ordinary как папка в файлах данных и метаданных
-
-
Спасибо ещё раз, все передал разработчикам, смотрим)
-
сделал без даунтайма, в итоге.
1. Добавляем -Dzookeeper.DigestAuthenticationProvider.superDigest в ZK и перезапускаем кластер ЗК
2. Добавляем в конфиги CH параметр identity в секцию ZK. Логин и пароль в этом месте желателен иной, не как в п.1.
3. По одной рестартим ноды.
4. Когда все ноды переподключили, делаем в zk addAcl
такой вот простенький гайд, как добавить аутентификацию в zookeeper без простоя clickhouse -
/* Пример для Issue пока не подобрал, поэтому просто вброшу сюда */
groupArrayMovingSum() как-то странно работает с сортированным набором данных. В моём запросе после добавления группировки он стал создавать (и потом суммировать) массив в рандомном порядке. При этом если добавить рядом в селект другую похожую функцию, то всё начинает работать правильно:
SELECT month, groupArrayMovingSum(chains) -- suxx
SELECT month, groupArray(chains), groupArrayMovingSum(chains) -- rulezz
С arrayCumSum() такой фигни нет. -
ClickHouse/ClickHouse tagged: v20.6.8.5-stable
Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v20.6.8.5-stable
Release notes:
v20.6.8.5-stableRelease v20.6.8.5-stable · ClickHouse/ClickHouseClickHouse stable release v20.6.8.5-stable
-
-
-
toUInt64(datetime_field)
-
Делаю операцию datediff, получаю время в секундах,
Но когда пытаюсь по условию отфильтровать (x > 100) получаю ошибку
Received exception from server (version 20.6.7):
Code: 41. DB::Exception: Received from localhost:9000. DB::Exception: Cannot parse datetime: Cannot parse DateTime from String. -
Не помогло
-
-
-
-
у тебя там похоже фильтрация по дате в виде toDateTime('YYYY-MM-DD') замени на toDateTime('YYYY-MM-DD 00:00:00') или toDateTime('YYYY-MM-DD 23:59:59')
-
-
Joined.
-
Joined.
-
Коллеги подскажите. помнится был ищью в кликхаусе, что для того чтобы прочитать последние n строк, кликхаус перечитывал всю таблицу. пофиксили это?
-
Звучит как что то пофикшенное давно, у вас какая версия?
-
19.17.4.11
-
ClickHouse Release 19.14.3.3, 2019-09-10
Optimize queries with ORDER BY expressions clause, where expressions have coinciding prefix with sorting key in MergeTree tables. This optimization is controlled by optimize_read_in_order setting. -
ок. спасибо
-
ничего не понятно, кто на ком стоял.
https://gist.github.com/den-crane/135663f3c01a439fef96016cec0a8bfa -
Памагити. Не могу на дебиан 10 поставить. На Интел. Ругается на зависимость (clickhouse-client зависит от clickhouse-common-static (= 20.9.3.45)). А такой пакет в репе только для АМД. Откуда брать, или что править? Заранее спасибо
-
покажите uname -a
-
какоооой бред
apt-get install clickhouse-server=20.8.3.18 clickhouse-client=20.8.3.18 clickhouse-common-static=20.8.3.18 -
можт там 32битный дебиан?)
-
да просто 3 пакета надо ставить разом , там с зависимостями все сложно
-
Извините за бред. Только сегодня Линукс в глаза увидел. Огромное спасибо за советы
-
исторически AMD сделал 64 бит платформу раньше Intel, да! интел опоздал уже 20 лет назад.
Поэтому в линуксе платформа называется amd64 (x86_64)
ну а пакеты amd64 и для amd и для intel
https://ru.wikipedia.org/wiki/X86-64 -
Joined.
-
Спасибо!
-
А какой репозитарий используете? В "http://repo.yandex.ru/clickhouse/deb/stable/ main/" не находит "clickhouse-common-static=20.8.3.18"
-
это был просто пример используйте любой
http://repo.yandex.ru/clickhouse/deb/stable/main/
20.9.3.45 например -
🙇♂️
-
-
-
-
Там из того что мешает откату, это нужно будет подчистить DDL для пересозданных system log tables.
-
-
Для ALTER ов емнип
-
-
Спасибо, глянул, в моем случае все не так страшно
-
гхыыыхаха, у меня первый-же запрос обычный самый простой select упал после апгреда стейджа на 20.8 (баг) , и 4й упал (мой баг) и при том что я соломки подстелил
<?xml version="1.0"?>
<yandex>
<profiles>
<default>
<joined_subquery_requires_alias>0</joined_subquery_requires_alias>
<any_join_distinct_right_table_keys>1</any_join_distinct_right_table_keys>
</default>
</profiles>
</yandex> -
32-х разрядный камень преткновения. Спасибо.
- 13 October 2020 (284 messages)
-
-
-
в 20.8 database engine Atomic для system по дефолту еще
-
зачем именно через TABIX?
ответ НЕТ
максимум что можно в формате VALUES Данные вставить через
https://clickhouse.tech/docs/en/sql-reference/statements/insert-into/
или через INSERT INTO ... SELECT ... FROM file(...)
https://clickhouse.tech/docs/en/sql-reference/table-functions/file/
но там надо сначала файл на ClickHouse сервер загрузить
и ну или через INSERT INTO ... SELECT ... FROM url(...)
https://clickhouse.tech/docs/en/sql-reference/table-functions/url/
тогда надо ваш CSV куда то в web положить
если так хочется вставить CSV
возьмите curl обычный
https://clickhouse.tech/docs/en/interfaces/http/
cat your_csv_file.csv | curl "http://clickhouse_host:8123/?query=INSERT INTO table FORMAT CSV" --data-binary @-INSERT INTO | ClickHouse DocumentationINSERT INTO Statement Adding data. Basic query format: INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v2
-
curl под windows тоже есть
-
Зачем - незнаю. 10 всяких штук для взаимодействия с БД не хочется. Спасибо понятно. через curl разобрался. Оказалось что "curl" Как псевдоним по умолчанию в PowerShell прописан. А это не curl.
-
А в чем разница между 20.9.3.45 от 09.10.2020 ? Или это разные ветки ?
-
https://clickhouse.tech/docs/en/faq/operations/production/#how-to-choose-between-clickhouse-releasesWhich ClickHouse version to use in production?
Which ClickHouse Version to Use in Production? First of all, let’s discuss why people ask this question in the first pla
-
20.6 и 20.9 это две разные ветки, да
почитайте ссылку вверху, там объяснено немного про релизную политику -
Спасибо! Почитаю
-
если кратко, то clickhouse бежит с очень хорошей скоростью и за этот год уже есть 20.11 функционал
также есть LTS релизы, куда по идее должны бекпортиться багфиксы (и не бекпортиться фичи)
но поскольку релизы пекуться как пирожки, то как то цикл LTS последнее время может сократиться с 1 года, до чуть ли не 3 месяцев, что как бы не соответсвует общепринятым LTS нормам
можно еще ориентироваться на рекомендации Altinity
https://altinity.com/blog/tag/releases/ -
Прикольно. Поставил КХ, а через 3 месяца, после обновлений, у меня и простые SELECT могут сломаться 😂
-
какие именно простые SELECT у вас сломались? то есть вероятность такая есть. но вот чтобы прямо "простые селекты сломались", это очень маловероятно
обычно ломаются какие то corner cases, которые неочевидные
или при обновлении на 20.8+ обратно на 20.1, 20.3 и 19.x уже точно без боли не откатишься, потому что хотя формат бинарный данных в MergeTree совместим
но например system database перешел в atomic а у него другой directory layout чтобы можно было полностью неблокирующие DDL реализовать -
Простите, это я утрировал так неудачно. Но в целом теперь более менее понятно. Спасибо Вам
-
Народ, предлагаю сделать ДОБРОЕ ДЕЛО
открываем
https://youtrack.jetbrains.com/
регаемся, если не зарегались
потом открываем
https://youtrack.jetbrains.com/issues/DBE?u=1&q=%23ClickHouse%20
видим 18 нерешенных issue
и в крайней правой колонке Like
ставим этим issues Like -
-
Подскажите пжл, как я могу задать алиас при написании:
ALTER TABLE SomeTable st UPDATE бла бла бла -
-
Никак. И нельзя проапдетить сджойнив с др. таблицей.
Можно использовать joinget/dictget.
И нельзя использовать alter update для бизнес-задач. -
Спасибо за ответ, надеюсь в новых версиях появится... раз уж есть возможность менять и удалять, то добавить туда джойны и алиасы было бы не лишним.
-
Вы не понимаете. Ну Нет этого ничего. И не будет еще очень долго.
-
Пока то что имеется меня устраивает, не такая критичная на данный момент проблема для меня
-
я и говорю, вы не понимаете
-
Joined.
-
-
-
-
-
а чем именно этот метод не удобен вам?
-
плюсую в чем для вас неудобство этого метода?
если не хочется бегать по нодам самому и коннектиться коннектитесь к одной ноде или к chproxy
и делайте что нибудь типа
SELECT hostName() h, formatReadableSize(sum(bytes_on_disk)) FROM clusterAllReplicas('your_cluster', system.parts) GROUP BY h; -
Что есть clusterAllReplicas?
-
cluster | ClickHouse Documentation
cluster, clusterAllReplicas Allows to access all shards in an existing cluster which configured in remote_servers sectio
-
вы какой то самодельный дашборд делаете ? или сбор статистики?
какой стек ? какой язык? -
Спасибо, это то, что нужно
-
Да, нужно отображать пользователю общий размер каждой ежедневной партиции
-
в grafana? через grafana clickhouse datasource?
-
-
Если версия КХ старая и нет этих функций, то можно создать отдельную distributed таблицу и делать тоже самое над ней)
-
-
дап, конечно
-
-
Всем привет!
Был запрос, который содинял вычислния из подзапросов в одну строку через join ... on (1 = 1) ALL
Но вот сегодня выполнил (старый, ранее работающий) запрос и словил ошибку Cannot detect left and right JOIN keys. JOIN ON section is ambiguous. (version 20.3.3.6 (official build))
Что-то поменялось и так теперь делать нельзя? -
Всем привет
Если я меняю в файле конфигурации logger/level, КХ должен подхватить эти изменения и поменять level или это что то что можно выставить только при поднятии сервера? -
скорее всего алиасы какие то разрулить не получилось
-
https://github.com/Slach/clickhouse-flamegraph
releases 2020.5.0
switch from TCP to HTTP/HTTPS protocol
add support for normalizeQuery for stacktrace groupingGitHub - Slach/clickhouse-flamegraph: CLI utility for build flamegraph based on system.trace_logCLI utility for build flamegraph based on system.trace_log - GitHub - Slach/clickhouse-flamegraph: CLI utility for build flamegraph based on system.trace_log
-
Запросы у нас большие, мы их генерим под разные СУБД универсально с небольшими адаптациями под диалекты. вот примерSELECT T61.A122, T61A123, T62.A141
FROM
(
SELECT
COUNT(DISTINCT T28.A120) AS A122, COUNT(DISTINCT T28.A121) AS A123
FROM
(
SELECT
T27.BO AS A116, T27.REGNMBR AS A117, T27.KBK AS A118, T27.COUNTERPART AS A119, T27.BO AS A120, T27.DO AS A121
FROM
T_PIAO_BODOTEST_DO T27
WHERE
(toYear(T27.PARAMYEAR) IN (2020))
AND (substr(T27.KBK, 1, 3) IN ('054'))) T28) T61 ALL
INNER JOIN (
SELECT
SUM(T32.A140) AS A141
FROM
(
SELECT
T31.A130 AS A136, T31.A133 AS A137, T31.A131 AS A138, T31.A134 AS A139, T31.A135 AS A140
FROM
(
SELECT
T30.A124 AS A130, T30.A125 AS A131, T30.A126 AS A132, T30.A127 AS A133, T30.A128 AS A134, SUM(T30.A129) AS A135
FROM
(
SELECT
T29.BO AS A124, T29.KBK AS A125, T29.CODEFAIP_MPI AS A126, T29.REGNMBR AS A127, T29.COUNTERPART AS A128, MAX(T29.SUMBO) AS A129
FROM
T_PIAO_BODOTEST_DO T29
WHERE
(toYear(T29.PARAMYEAR) IN (2020))
AND (substr(T29.KBK, 1, 3) IN ('054'))
GROUP BY
T29.BO, T29.KBK, T29.CODEFAIP_MPI, T29.REGNMBR, T29.COUNTERPART) T30
GROUP BY
T30.A124, T30.A125, T30.A126, T30.A127, T30.A128) T31) T32) T62 ON
(1 = 1) -
-
хмм... INNER JOIN ... 1=1
может проще на CROSS JOIN поменять? -
-
-
-
если есть условия объединения, то INNER JOIN
если нет то CROSS JOIN
и без ON
https://clickhouse.tech/docs/en/sql-reference/statements/select/join/#select-join-typesJOIN | ClickHouse DocumentationJOIN Clause Join produces a new table by combining columns from one or multiple tables by using values common to each. I
-
ну как бы тут в ошибке все сказано
clickhouse не может определиться с колонками которые нужны для JOIN
видимо раньше был более тупой алогритм который просто бегал и хешировал
сейчас там появился partial join через диск... и видимо докрутили оптимизацию -
Спасибо, пошел пробовать.
-
ГТЬ
-
-
-
Всем привет.
Столкнулся с такой проблемой, в базе хранится широта и долгота. Хочу выбрать все записи, для которых расстояние до указанной точки меньше 1000.
В базу попала невеладиная запись, я добавил условие, где проверяю, что широта и долгота валидная, но каждый раз на этой записи запрос выдает 0 и ошибку, хотя данные есть.
Есть ли возможность сделать так, чтобы отдал ответ и не падал в ошибку?
Пример запроса
select
count()
from
geocords
where
Longitude <= 180
AND Longitude >=-180
AND Latitude <= 90
AND Latitude >=-90
AND greatCircleDistance(toFloat64(60.616865), toFloat64(56.826027), Longitude, Latitude) < 1000
Ошибка
DB::Exception: Arguments values out of bounds for function greatCircleDistance. -
Проблема в том, что значения вычисляются одновременно
можно сделать что то вроде (least(greatest(lat,-90),90) -
AND это функция и для нее вычисляются все аргументы пока clickhouse так работает
можно попробовать вот так
select
count()
from
geocords
where
greatCircleDistance(toFloat64(60.616865), toFloat64(56.826027), if (Longitude <= 180 AND Longitude >=-180, Longitude, NULL), if(Latitude <= 90 AND Latitude >=-90, Latitude, NULL) ) < 1000 -
-
Таблица создана с помощью движка SummingMergeTree, пишется очень много данных.
Партиции по toYYYYMM(2020-05-16), как пример.
Но в кликхаусе ооочень много партиций на этой таблице.
./201912_259810753_259861552_852
./201911_260009475_260009475_0
./201911_260385544_260385544_0
./201912_259765325_259765325_0
./201912_260269621_260269621_0
./201912_259849850_259849850_0
./201911_260197940_260197940_0
./201912_238539956_259778320_1652281
./201912_259881189_259881189_0
not_active_parts─┬─table───────────────
695699 │ strange_table_1
смотрю не активные парты таким образом
SELECT count() as not_active_parts, table from system.parts WHERE NOT active GROUP BY table order by not_active_parts desc; -
по идее кликхаус должен удалять неактивные парты, но чет не удаляет
И место заканчивается крайне быстро -
через 8-10 мин вроде при стандартной настройке
-
сутки уже
-
что значит вставляется очень много данных?
какими пачками? -
Мы вставляем батчами по 10к, примерно раз в секунду
-
разве это много? у нас 1М в минуту только по одной таблице.
-
У нас hdd и clickhouse в standalone
-
Тогда да, много
-
Joined.
-
Joined.
-
Нужен перезапуск кх
-
Есть видимо баг. Иногда тред удаляющий или падает или зависает до рестрта кх. Какая версия кх ? Ошибки в логе?
-
19.9.2 revision 54421.
-
ошибок в логе не нашел
-
Посмотрите уменьшается кол-во или нет. Если остановить инсерты.
-
Нет, не уменьшаются. У нас есть предположение. может нам увеличить кол-во строк в батче или интервал больше делать
-
чтобы кликхаус смог это все прожевать
-
Пасиб
-
SELECT * FROM system.merge_tree_settings WHERE changed
что нибудь показывает
я правда не знаю было ли там что нибудь для 19.x -
пусто
-
Коллеги, помогите дилетанту в КН сделать правильную табличку для большого количества данных следующей структуры, с целью последующего анализа:
2016-06-19,21:44:34 proto=6 osrc=192.168.100.105:51496 tsrc=192.168.25.4:2474 odst=192.168.25.7:22 tdst=192.168.25.7:22 duration=117
Заранее благодарен за помощь! -
Joined.
-
Зависит от ваших запрос. Нужно выяснить по степерни важности (скорость работы запроса, кол-во запросов) какие есть запросы и для самый важных оптимизовать таблицу
-
запросы будут простецкие,вида "select osrc from table where date="" and tdst=""
-
Не похожи на аналитические. Возможно вам не нужен КХ? КХ заточен для оптимального чтение подмножества строк таблицы и построения по ним агрегатов - OLAP-нагрузка. А у вас выглядит как OLTP - чтение строки по ключу
-
-
Коллеги, подскажите пжл, пытаюсь пересоздать system.query_log c partition expression toYYYYMMDD, а он автоматом создаётся с toYYYYMM (
-
Системные таблицы создаются на лету при старте КХ. Но поскольку она таки хранит данные, поищите в каталоге с КХ файл metadata/system/query_log.sql, возможно можно там поменять и рестартануть КХ
-
Я знаю что на ходу, поменял в config.xml секцию
-
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>toYYYYMMDD(event_date)</partition_by>
<!-- Interval of flushing data. -->
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log> -
Joined.
-
-
-
Здравствуйте,подскажите пожалуйста. Одновременно на сервере выполняются запросы insert и select, причём в разные таблицы. Возникает ошибка: DB::Exception: Assertion violation: !hostAndPort.empty() in file "../contrib/poco/Net/src/SocketAddress.cpp"
Если запросы запускаются не одновременно, то каждый отрабатывает ок. Кто сталкивался с таким? куда копать? -
переименуйте существующую query_log и КХ создаст новую с вашим partition_by
-
это на гитхаб, с примерами, с версией КХ, со структурой таблицы, с логами, с трейсами
-
понял, спасибо
-
Joined.
-
-
-
-
Я дропал старую, новая создалась со старым ключом, хотя в конфиге был новый
-
а вы этот кусок в конфиге раскоментировали?
а может и рестарт КХ нужен, а потом drop (я не уверен), но это 100% работает -
query_log в config.xml вроде бы при рестарте подтягивается
-
-
сам config.xml подтягивается при изменении, но параметры в большинстве своем применяются только при старте.
(часть параметров можно менять без рестарта) -
Рестартовал и только потом дропал
-
лучше не надо писать в Distributed (если у вас используется Replicated и не нужен шардинг по ключу)
Engine=Kafka и MV конечно надо создавать на всех репликах -
а вы этот кусок в конфиге раскоментировали?
-
Я его поменял с YYYYMM на YYYYMMDD
-
как тогда размазывать данные по шардам? в MV прописывать условие выборки (аналог ключа шардирования)?
-
он закоментирован <!-- -->
<table>query_log</table>
<!--
PARTITION BY expr https://clickhouse.yandex/docs/en/table_engines/custom_partitioning_key/
Example:
event_date
toMonday(event_date)
toYYYYMM(event_date)
toStartOfHour(event_time)
-->
<partition_by>toYYYYMM(event_date)</partition_by>
<!-- Instead of partition_by, you can provide full engine expression (starting with ENGINE = ) with parameters,
Example: <engine>ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) SETTINGS index_granularity = 1024</engine>
--> -
если нужен шардинг по ключу тогда конечно Distributed
-
Вот, отсюда вопрос. Distributed таблица по логике одна на весь кластер, если на каждой реплике каждого шарда будет Engine=Kafka и MV TO Distributed, не будет ли дубликатов данных или еще каких проблем? Как я понимаю, каждая реплика с таблицой Engine=Kafka читает кафку под своим консьюмером, то есть каждая реплика достает из кафки свою копию данных, или это не так?
-
В этом примере как раз нет
-
Distributed конечно не одна на весь кластер. Каждая нода КХ независима, и таблицы Distributed на них независимы.
>не будет ли дубликатов данных или еще каких проблем
не будет.
Просто создавайте все одинаково, на каждом ноде все 3 Kafka + MV + Distributed
>каждая реплика с таблицой Engine=Kafka читает кафку под своим консьюмером,
>то есть каждая реплика достает из кафки свою копию данных, или это не так
это так, поэтому все ОК -
покажите свой кусок конфига начиная и заканчивая <table>query_log</table>
-
-
спасибо большое :)) а internal_replication оставлять по умолчанию (false)?
-
-
-
Этот параметр между двумя комментамии
-
конечно он должен быть true при ReplicatedMergeTree иначе будут дубликаты
internal_replication=true значит что внизу Replicated и она сама internally будет делать репликацию
при internal_replication=false — репликацию делает Distributed (она пишет копию во все реплики) -
понял, спасибо
-
т.е. после этого КХ рестартован и таблица дропнута и снова создалась с YYYYMM ?
проверьте что получилось при компиляции конфига тут /var/lib/clickhouse/preprocessed_configs/config.xml -
Да, всё верно
-
cat /var/lib/clickhouse/preprocessed_configs/config.xml | grep part
<partition_by>toYYYYMMDD(event_date) -
нужно больше строк вокруг )
-
-
eto processed?
-
Yep
-
a "show create system.query_log" ?
-
-
-
Привет,
мучаюсь с проблемой Memory limit (total) exceeded, гитхаб изучил.
Простейший запрос, выполняемый в один поток последовательно
for i in `seq 1 500`; do curl "http://ch:8123/?query=SELECT%20a%20FROM%20%60db%60.b%20WHERE%20c%3D1%20format%20JSON"; done;
(select a from b where c=1)
приводит к этой фаталочке спустя секунд 15
Данных - смешные сотни метров в сжатом виде.
Судя по логу отъедает 4мб за запрос и копится до лимита в 3,6гб, в MemoryTracker наблюдаю непрерывный рост, который, если не прекратить запросы, не сбросится.
Но реального роста в top нет
Версия 20.9.2.20 stable, в 20.6 и 20.8 то же самое было
Править конфиг про mem_to_ram_ratio это как-то грязно.
Подскажите плиз, есть какое-то решение или запланированный фикс? -
Попробую, спасибо
-
Пользуясь случаем, ну раз уж пошла такая пьянка, как пропатчить кде под фрибсд
-
?
-
Ну баг. Тикет сделайте.
-
ага.
-
отношение к реальным багам у них такое
-
process '/usr/bin/clickhouse' started with executable stack · Issue #15872 · ClickHouse/ClickHouse
This line is written in my dmesg in Fedora 32. Seems it is security related.
-
типа УМВР ЧЯДНТ
-
-
я все читал, вы чудак человек . Кто написал что у вас официальный релиз? Оф. релиз собран gcc
-
у меня ТОЖЕ
-
что тоже?
-
тоже GCC
-
где это в тикете написано?
-
а где написано что шлангом ?
-
у вас официальный билд? rpm с яндекса?
-
нет. Я вынужден собирать сам потому что сертификация ФСТЭК того требует.
-
до свидания, целую
-
я так думаю все таки официальный билд - это уже бинарник с сайта... мало ли с какими флагами вы игрались... даже коммерческие вендоры не дают поддержку на самостоятельно собранные билды
-
Ничего я не игрался
-
посмотрите комментарии
-
Я собрал по инструкции из документации КХ
-
в чистой ОС
-
а это не важно )
-
скачайте бинарник официальный и проверьте на нем
-
-
ну это и есть не признание бага в системе сборки. То что он по какой-то причине не проявляется у вас, не означает что его нет.
-
Окей, где посмотреть официальный .spec-файл ? давайте соберу его
-
я не работаю в яндексе, я дба в канаде, что такое стек знаю из слова stackoverflow.com
там собирается deb и конвертируется в rpm -
ну это же рукалицо, неправда ли ?
-
и да, не стек, а спек
-
rpm не нужен яндексу, в пути кормить не обещали.
-
я про started with executable stack
-
Так или иначе, баг воспроизводится из инструкции в документации.
-
@milovidov_an Можно комментариев ?
-
и чинить будете его вы и инструкцию тоже.
-
Вот Алексею делать больше нечего
-
но на гитхабе он что-то делает
-
вот именно
-
-
он делом занят
-
у них другое измерение, там президентом служит БЧР и технокоммунизм
-
конвертацией из deb в rpm, видимо
-
С одной стороны согласен что к багам относятся медленно. С другой стороны это мне кажется важным ибо не фиксят почему то именно МОЙ баг 😊 а он самый важный. Но мы же понятия не имеем какой у ребят план работ, может тот баг о котором например я зарепортил замечен у 2 с половиной человек. Я бы тоже все силы на такую задачу явно не бросал.
Ну и потом, все же просто, можно взять и юзать аналоги 😊 БД то бесплатная и опенсорсная, никто ничего и никому не должен -
вы в курсе что rpm не было раньше? И он не нужен самому Я?
Потом кто-то страждущий пришел и сделал как сделал. Опенсоурс. -
а я и не говорил что всё бросить и сейчас же исправить. Но закрывать как not a bug - вот что не правильно
-
господи, баг это когда КХ падает раз в 10минут и кораптит данные.
У вас не баг, минорная иша. -
допустим. даже допустим что можно класть болт на секурити ( исполнимый стек это просто жесть какая дырень). Но закрывать как Not a bug всеравно неправильно
-
откройте назад, какие вопросы-то. Хотите я тег добавлю prio-major ? И назначу вас исполнителем?
-
Я не могу открыть. Если удастся поправить у себя — законтрибучу, обещаю.
-
Баг переоткрыт, спасибо.
-
-
возможно вот это
-
ну ладно. я пока поразбираюсь
-
Joined.
-
https://github.com/ClickHouse/ClickHouse/issues/15932#issuecomment-707828071
в общем КХ не приспособлен для 3.6ГБ, это не жизнь это боль.MemoryTracker wrong total: Memory limit (total) exceeded, but no real usage · Issue #15932 · ClickHouse/ClickHouseSimple SELECT query leads to Memory limit (total) exceeded due to wrong reporting by MemoryTracker (no real usage detected in top) I execute a simple query (select a from b where c = 1) in one thre...
-
-
-
ну я в курсе, я делаю триаж, воспроизвожу
я просто коммент дописал туда, это не совсем баг. -
-
аллокатор не отдает память сразу, и тредов много, след. запрос выполняет другой тред и хапает память, потом снова другой, тоже хапает
-
-
и например в КХ по умолчанию ожидается что mark_cache раздуется до 5 ГБ, а у вас памяти 4.
-
я тоже программист на баше, но насколько я понимаю можно память запросить но не комитить и она не будет отражаться.
Но возможно это баг в трекинге, я не знаю -
format TSV все тоже самое
-
-
по опыту вижу что КХ сожрет 20ГБ и остановится, в смысле будет прыгать хоть до если дать 10000 и возвращаться на 20
-
-
похоже с клиентом такого нет, это значит баг в трекинге.
-
Добрый вечер!
Подскажите, пожалуйста, есть ли какой-то стандартный подход к транспонированию таблицы в КХ? Мне нужно, чтобы строки стали столбцами, а столбцы строками. Пытаюсь сделать это через массивы, получается как-то громоздко.. может быть есть какой-то простой и известный способ?)
Спасибо! -
нет ничего такого простого
либо groupArray
либо sumIf(col = ‘A) sumA, sumIf(col = ‘B’) sumB, sumIf(col = ‘C) sumC, sumIf(col = ‘D) sumD, -
Поняла, спасибо большое!!
-
groupArrayInsertAt
если нули есть -
SQL не предназначен для этого и ожидает что число и типы колонок известны до исполнения запроса
-
Это нормализация markdown, которую добавили по глупости. Я уже много раз писал тому человеку, который её добавлял, что он всё неправильно сделал. Там просто скрипт, который берёт и "всё портит" (ссылки, списки и т. п.). Через некоторое время отключим в любом случае, а пока ждём, чтобы он не слишком обиделся из-за того, что он сделал ошибку.
-
arrayElement(groupArrayInsertAt(Null, 2)(tuple(toNullable(eavValue)), toUInt32(indexOf(["col1, col2"], eavCol) - 1)).1 as values, 1) as "col1",
values[2] as "col2"
тип такого, но это если колонок не под 50 штук, иначе поиск в массиве плохо -
Спасибо, посмотрю!
-
Ого, спасибо!
-
Угу, поняла, спасибо!
-
Кажется, что-то пошло не так 🙂 Engine: ReplicatedMergeTree. Обе реплики одного шарда нон-стопом репортят следующее:
2020.10.13 16:40:58.958368 [ 5041 ] {} <Warning> events_local (ReplicatedMergeTreePartCheckThread): Checking part 725546f36497be3ad2d9ebf0ac5234ec_37946_37980_7
2020.10.13 16:40:58.959034 [ 5041 ] {} <Warning> events_local (ReplicatedMergeTreePartCheckThread): Checking if anyone has a part covering 725546f36497be3ad2d9ebf0ac5234ec_37946_37980_7.
2020.10.13 16:40:58.962015 [ 5041 ] {} <Warning> events_local (ReplicatedMergeTreePartCheckThread): Found parts with the same min block and with the same max block as the missing part 725546f36497be3ad2d9ebf0ac5234ec_37946_37980_7. Hoping that it will eventually appear as a result of a merge.
Кто-нибудь знает, что могло привести к этой ситуации и как фиксить? -
-
В system.replication_queue вижу 2 "застрявшие" таски:
Одна отложена по следующей причине:
Not executing log entry for part 725546f36497be3ad2d9ebf0ac5234ec_37979_37979_0 because it is covered by part 725546f36497be3ad2d9ebf0ac5234ec_37946_37980_7 that is currently executing
Другая встряла:
Not merging into part 725546f36497be3ad2d9ebf0ac5234ec_37946_37980_7 because part 725546f36497be3ad2d9ebf0ac5234ec_37979_37979_0 is not ready yet (log entry for that part is being processed)
Выглядит как дэдлок -
грепайте на репликах куда делся 725546f36497be3ad2d9ebf0ac5234ec_37979_37979_0
но да придется удалять в ЗК вручную, есть на гитхабе примеры как делать -
2020.10.13 11:31:03.114038 [ 30036 ] {} <Warning> kuma.events_local: Source replica does not have part 725546f36497be3ad2d9ebf0ac5234ec_37979_37979_0. Removing it from ZooKeeper.
2020.10.13 11:37:16.549791 [ 30016 ] {} <Warning> kuma.events_local: Part 725546f36497be3ad2d9ebf0ac5234ec_37979_37979_0 from own log doesn't exist.
Все что есть. Не очень информативно -
-
-
https://github.com/ClickHouse/ClickHouse/issues/10368
SYSTEM RESTART REPLICAS
ааану кстати , сделали detach part / drop part жеSome merges may stuck · Issue #10368 · ClickHouse/ClickHouseThis bug is discovered on Yandex.Metrica servers. If there is assigned merge but some parts in between of the range of parts to merge get lost on all replicas, the merge cannot proceed and the foll...
-
-
-
выкинуть КХ, поставить редис
-
-
и что? Я и говорю это потому что лучше вас понимаю для чего КХ подходит, для чего нет.
-
-
как вы удалили MV?
-
DROP
-
DROP TABLE materialized_view_name?
-
надо читать ошибки, inner тоже должна была удалится
-
Да
-
можно сказать drop table “.inner….”
-
телеграм стал кавычки двойные поганить, пора уходить с телеги
-
Спасибо
-
-
" qwe "
-
Может с айфона ?
-
1) https://github.com/ClickHouse/ClickHouse/issues/2738 (короткий ответ: в Яндексе любят очень быстро и не экономят память)
2) потому что таблица словаря для этого не оптимизирована, и очень медленно работает, это куча хеш-таблиц (для каждой колонки) которые обходятся построчно.10 times mem overhead on complex_key_hashed dictionary ( 227 MiB table eats 2.50 GiB) · Issue #2738 · ClickHouse/ClickHousecreate table test(a Int64, b Int64, s String) Engine=MergeTree partition by tuple() order by b; insert into test select rand64(), number, toString(number) from numbers(10000000); optimize table tes...
-
И это относится не только к complex_key_hashed, видимо..
Спасибо -
ко всем, недавно появился какой-то эконмный layot в два раз что-ли меньше кушает
-
sparse_hashed
-
Ну, в два раза все равно не сравнится с обычной таблицей...видимо, придётся через хранение в оперативке организовывать...
-
о чем вы? какую проблему решаете?
-
это будет хуже чем словарь direct
-
Да, просто очень удобный инструментарий со словарями в качестве кэша был бы, без лишних доработок и щапускатоиов выставлять lifetime и т.д...а так, придётся отдельную таблицу создавать и обновлять тоже внешними средствами
-
Ну, в планах есть сделать что то вроде cron в кх емнип:)
-
Это здорово!
-
-
-
все ровно наоборот. Nullable поля занимают больше места и дольше работают (до двух раз)
-
Объявлять все обычными с дефолтами?
-
NullableVsInt
NullableVsInt. GitHub Gist: instantly share code, notes, and snippets.
-
да
-
-
ну вот например я температуру храню неизвестную как -1000F
как вы думаете это удобно? -
тогда еще Nullable не было, когда я начал так хранить
-
Ну, тащемта о том же. Окей, благодарю.
-
-
-
NullableVsInt
NullableVsInt. GitHub Gist: instantly share code, notes, and snippets.
-
3.5M Mar 10 21:43 A.bin
286K Mar 10 21:43 A.mrk2
3.4M Mar 10 21:43 B.bin
286K Mar 10 21:43 B.mrk2
434K Mar 10 21:43 B.null.bin
286K Mar 10 21:43 B.null.mrk2
303 Mar 10 21:43 checksums.txt
67 Mar 10 21:43 columns.txt
8 Mar 10 21:43 count.txt -
-
В таком случае, другой вопрос.
Как лучше вести себя с FixedString(n), когда значения может и не быть. Можно какими-нибудь нулями забить, но не хочется.
> is efficient when data has the length of precisely N bytes. In all other cases, it is likely to reduce efficiency.
Есть инфа, как ведет себя FixedString с ''? -
FixedString имеет смысл использовать только в тех случаях, когда строки действительно имеют фиксированную длину. В остальных случаях, преимущества по скорости не будет, или даже скорость работы будет хуже.
-
>Есть инфа, как ведет себя FixedString с ''?
ну плохо себя ведет -
-
-
как раз все алгоритмы рассчитаны на фиксированный размер, поэтому все строки будут расширены пробелами до этого размера
-
вы лучше на LowCardinality посмотрите
-
Не, не подходит.
-
-
-
Ну может быть преимущество, если ты делаешь GROUP BY FixedString и еще по другим fixed length полям, тогда будет использовать keys* вместо serialized мапа, она быстрее бывает, но с 32 байтами этого не будет
-
лучше вместо Nullable использовать какое то другое значение за null, nullable в кх лучше избегать
-
Ок, спасибо
-
-
вы по одной строке что-ли вставляете? Какая связь вообще между этими метриками?
-
Joined.
-
вставляет Engine=Kafka через MV
-
- 14 October 2020 (119 messages)
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
-
Метрика ClickHouseProfileEvents_InsertedRows оч странная: взял разницу за минуту этой метрики и разницу count по всем таблицам за минуту - метрика показывает в полтора раза ниже значение, чем реальное количество вставленных строк
-
-
всем привет, хочу перетащить data КХ в другую папочку, из /path/to/A в /path/to/B, если я стопну КХ, копирну файлики и поменяю пути в
/etc/clickhouse-server/conf.d/storage_data.xml на /path/to/B. После старта ничего криминального не должно случится? -
не должно
-
-
сам КХ это про бинарь? А что не так с tmp ?
Я так понимаю нужно путь для tmp_path в конфиге поменять на валидный -
ну если у вас тмп тоже показывает path/to/A/temp
а вы её перенесете, будет плохо -
ненене
было /path/to/A/tmp
станет /path/to/B/tmp
и в конфиге поменять на новый
<yandex>
<path>/path/to/B</path>
<tmp_path>/path/to/B/tmp/</tmp_path>
<user_files_path>/path/to/B/user_files/</user_files_path>
</yandex>Мне кажется мы друг друга немного не допонимаем 😊 -
если измените все пути - ОК.
я же не Ванга чтобы знать что у вас есть в /etc/clickhouse-server/conf.d/storage_data.xml, а чего нет -
Супер, спасибо