- 01 March 2019 (164 messages)
-
Я откатил на 19.1.9
-
В мастере это в какой версии?
-
Что значит в clickhouse-client команда \
?
минимизированное приглашение ? -
В основной ветке на гитхабе, но ни в какой версии еще
-
Наверно значит много строчек
-
Многообещающее. А когда ждать релиз?
-
-
А чем можно помочь? Поставить последний мастер и потестить?
-
Нет. Спотыкается как обычно, начиная со второй
-
ну напшии все в одну без переноса
-
Добрый день!
Пытаюсь подключиться прямо из JetBrains Rider к ClickHouse в облаке. Хост правиьный, БД написал, SSL включил, сертификат присоединил... и тест коонекшена не проходит.
[1002] ClickHouse exception, code: 1002, host: ... failed to respond .
Из DBeaver всё норм.
Причём к нашему локальному ClickHouse подключаюсь без проблем и из Rider и из DBeaver. Никто не сталкивался? -
Да, потестить на своих запросах
-
Разобрался. Как и в DBeaver надо было настраивать соединение через вкладку Advanced.
-
А вы используете ssl? Я никак не могу подключится к КХ через ssl через DBeaver
-
Тогда результат не отличается от того, что в обычном приглашении пишу
-
Да, там в Connection settings -> Driver properties : ssl выставил в true. Ну и путь до серитификата надо указать в поле sslrootcert.
-
Joined.
-
Joined.
-
Добрый день коллеги
С чем может быть связана ошибка при чтении из таблицы?
После этого таблица перестала быть доступной для чтения
DB::Exception: Cannot write to ostream at offset 2570059776
<Error> HTTPHandler: Cannot send exception to client -
Доброе утро! Кто знает, чем отличается countState от uniqState по уникальному полю в materializedView? countMerge выдаем неправильные данные, uniqMerge - четко правильные
-
count - это count (считает кол-во строк), uniq - это алиас для COUNT(DISCTINCT()) - считает кол-во УНИКАЛЬНЫХ значений
-
в MergeTree таблицу добавляем 100 значений, во вьюшке с countState в итоге 70, во вьюшке с uniq в итоге 100 (правильно)
-
то есть count() в AggregatingMergeTree куда-то девает часть данных
-
Покажите запрос создание исходной таблицы и матвьюхи
-
CREATE MATERIALIZED VIEW IA ENGINE=ReplicatedAggregatingMergeTree(path,smth,iDate, (iDate,managerId,userId,campaignId,creativeId,sourceId,domainId), 8192)
AS SELECT
iDate,
managerId,
userId,
campaignId,
creativeId,
sourceId,
domainId
countState(id) as iCount
FROM MergeTreeTableName
GROUP BY
iDate,
managerId,
userId,
campaignId,
creativeId,
sourceId,
domainId -
countState(id) as iCount - не получается потом вытащить правдивое число
-
uniqState(id) - правильно все хранит
-
как будто где-то там внутри при мерже поведение count() какое-то не такое, как я думаю)
-
Запрос
SELECT
iDate,
managerId,
userId,
campaignId,
creativeId,
sourceId,
domainId
count(id) as iCount
FROM MergeTreeTableName
GROUP BY
iDate,
managerId,
userId,
campaignId,
creativeId,
sourceId,
domainId
Показывает значения, совпадающие с uniqMerge ? -
ага
-
И покажите запрос, который выполняете над матвьюхой (там где uniqMerge)
-
select countMerge(iCount) from impressionsAggregatedCountNoId where impressionDate='2019-03-01' and userId=64 and creativeId=2322
-
select uniqMerge(impressionsCount) from impressionsAggregatedUniq where impressionDate='2019-03-01' and userId=64 and creativeId=2322
-
вот 2 вьюхи, в одной uniqState во второй countState
-
и эти 2 запроса
-
uniq правильное
-
Вы же понимаете что countState(id) применяется к каждому блоку, вставляемому в исходную таблицу? А не ко всей исходной таблице?
-
А uniqStat - вычисляет промежуточное состояние этой агрегатной функции (для каждого вставляемого блока) и при вызове uniqMerge - доагрегирует и потому показывает правильное значение
-
то есть countState() не будет во вьюшке показывать правильное количество строк? Мне казалось это 2 одинаковые ф-ции, за исключением того что uniq уникальные ищет
-
1. это не одинаковые функции.
2. матвью указаный при создании запрос применяет к вставляемому блоку -
то есть ожидалось что при вставке countState() добавит именно вставляемое количество, как и uniqState
-
КХ это не про ожидание, а про суровую реальность
-
да, если применять к блоку что count что uniq кажется что для уникальных значений, типа автоинкремента, поведение будет одно
-
но по факту uniq нас спасает)
-
Это да
-
попробовали на новой версии кликхауса
-
это был баг
-
у нас древняя 1.1.54.. версия
-
count() работает на свежих версиях нормально)
-
Подскажите а какой момент перестраивается materualuzed view
-
коллеги, в кликхаусе есть функции toStartOfHour, toStartOfDay, а если нужна функция toStartOf12Hours то как быть? может как-то можно через деление в самом sql запросе это прописать?
-
ClickHouse тормозит
-
-
оО спасибо, жаль только что в документации этого не написано(
-
Ребят подскажите, кто нибудь добавлял модели catboost в КХ. Проблоема след плана - выкачиваю прекомпилированные файлик с гита https://github.com/catboost/catboost/releases, и в конфиге КХ указываю путь до него
<catboost_dynamic_library_path>....catboost.so</catboost_dynamic_library_path>
Плюет пошибку -
Code: 375, e.displayText() = DB::Exception: Cannot dlopen: /usr/lib64/python2.7/site-packages/catboost/libcatboostr-linux.so: undefined symbol: R_DimSymbol, e.what() = DB::Exception
Пробовали также устанвоить catboost через pip шибка была другая -
Code: 375, e.displayText() = DB::Exception: Cannot dlopen: /usr/lib64/python2.7/site-packages/catboost/_catboost.so: undefined symbol: PyExc_KeyboardInterrupt
В итоге я выкачал рекомпиленные файлы из докер контейнера из данного туториала https://github.com/yandex/clickhouse-presentations/blob/master/tutorials/catboost_with_clickhouse_ru.md, и все заработало.
Но хотелось бы понять почему КХ не принимал файлы выачанные с гита и через pipReleases · catboost/catboostA fast, scalable, high performance Gradient Boosting on Decision Trees library, used for ranking, classification, regression and other machine learning tasks for Python, R, Java, C++. Supports comp...
-
Еще вопрос
Задача: Перенести MergeTree в ReplicatedMergeTree
Делаю: ALTER TABLE ch_log ATTACH PARTITION '20190301_20190301_111745_113127_278'
Получаю: Code: 53, e.displayText() = DB::Exception: Type mismatch in IN or VALUES section. Expected: UInt32. Got: String
Почему? -
Ожидал сообщение что файл кривой, его нет, но не про типы
-
-
ALTER TABLE ch_log ATTACH PART '20190301_20190301_111745_113152_283'
Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 0. Bytes expected: 4. -
скопировал файлы с боевой БД на новый сервер - пытаюсь их развернуть
-
права 777
-
попробовал из каталога detatched/ch_log_data
ALTER TABLE ch_log ATTACH PARTITION 'ch_log_data'
Code: 53, e.displayText() = DB::Exception: Type mismatch in IN or VALUES section. Expected: UInt32. Got: String
есть варианты что не так? ) -
Делаю так
ALTER TABLE ch_log ATTACH PARTITION '201902'
Code: 53, e.displayText() = DB::Exception: Type mismatch in IN or VALUES section. Expected: UInt32. Got: String
Есть одно поле UInt32, ощущение что ATTACH вставляет его как String -
-
https://clickhouse.yandex/docs/en/query_language/alter/#alter_attach-partition
Хотя в таблицах старого типа кавычки тоже допускаются -
да, а в ру версии ковычки https://cl.ly/f74ae046cfe8
вообще неплохобы приводить примеры конкретных запросов - так сильно понятней по первому разуImage 2019-03-01 at 5.00.03 ПП.pngShared with CloudApp
-
ALTER TABLE [db.]table ATTACH PARTITION|PART 'name'
-
Следующий вопрос
ALTER TABLE ch_log ATTACH PARTITION 201902
ALTER TABLE ch_log ATTACH PARTITION 201903
ALTER TABLE ch_log ATTACH PARTITION 777777
Все 3 запроса возвращают ОК
есть куски
20190201_20190221_50350_93852_12781
20190301_20190301_111745_113152_283
Но в таблице ничего. Почему?
По идее надо ругать на 777777 или сказать сколько чего вставил -
-
в старых специально не задавалось
в новых PARTITION BY toYYYYMM(created_at) -
плохо что нет сообщений что не так, даже если явно нет партиции - непонятно что делать
-
-
-
https://cl.ly/09d177e390e7 - это больше похоже на стандартный формат храненияImage 2019-03-01 at 5.22.07 ПП.png
Shared with CloudApp
-
-
А почему записи не добавляются и ошибок нет? )
-
кусок есть 20190201_20190221_50350_93852_12781
201902 -
ALTER TABLE ch_log ATTACH PARTITION 201902
-
Joined.
-
хотя консольный клиент пишет 0 rows in set. Elapsed: 0.003 sec.
-
Добрый вечер, а нужно ли учитывать порядок при описании атрибутов внешних словарей из локальных csv файлов или нет? Если нужно, то как работает сопоставление порядка колонок (сначала секций key, затем уже attribute?)
-
попробую сделать дамп
-
jfyi все команды так делают и optmize и drop partition, может для идемпотентности.
-
да, ключ - первая(ые) колонки в csv
-
Тут специфика формата имени куска - кусок старого стиля воспринимается таблицей нового стиля, как кусок партиции 20190201 (а не 201902). Хотя этот случай наверняка довольно распространённый, и можно было бы добавить сообщение об ошибке.
-
ну надеюсь shadow дамп совместим между версиями
-
-
а как мне данные перенести? )
-
-
неужели кликхаус не может нормальные мануалы сделать и написать более высокоуровневый продукт чтоб вы все так не парились
-
-
ClickHouse client version 1.1.54318.
ClickHouse client version 19.3.3.
вот у меня такая разница -
между старой и новой версией
-
-
может в csv?
-
Есть такое :) https://cloud.yandex.ru/services/managed-clickhouseClickHouse база данных (БД)
ClickHouse – быстрая аналитическая база данных с открытым исходным кодом. Идеально подходит для обработки больших данных в реальном времени. Попробуйте сервис по управлению кластерами баз данных ClickHouse в облаке. Берём на себя большую часть работы по обслуживанию.
-
-
Если вы изменили конфиг и изменения не применились - значит нужно перезагружать
-
-
Официальный ответ что? Тут чат, где читают и пишут пользователи КХ. Явного списка параметров, которые требуют перезагрузки - нет (можете поискать по чату)
-
-
Здравствуйте. Почему JOIN такой тормозной? Это так и должно быть?
-
Поищите по чату. На вскидку - конфиг словарей подхватывается без перезагрузки
-
Нужно больше деталей: какая схема, сколько записей, как джоините, зачем вам это
-
Ну когда будет КХ 25 лет, список будет в документации и в таблице (settings) будет колонка (dynamic y/n)
Нельзя изменять настройки (размеры) кешей и настройки megretree -
а то что там конфиг надо заливать через api? не очень то высокоуровневое решение))
-
он не тормозной (я думал что в КХ hash join тормозной, потом сравнил с вертикой и понял что нет).
Ну и есть специальный движок Join, он летает, как и словари.
По большому счету в OLAP можно использовать только HJ. -
ясно понятно
-
Но вообще можно запилить NL и эвристикой на него переключаться (правая отсортирована и записей <10млн., я проверял быстро работает).
-
create table l1( A Int64 ) Engine=MergeTree order by A;
insert into l1 select number from numbers(1000000000);
create table r1( A Int64 ) Engine=MergeTree order by A;
insert into r1 select -number from numbers(10000000);
HJ: SELECT r1.* FROM l1 ANY INNER JOIN r1 using A
Elapsed: 9.800 sec. Processed 1.01 billion rows
NL: select A from l1 where A in (select A from r1)
Elapsed: 0.759 sec. Processed 8.19 thousand rows -
А хотя, эот неправильно, наверное надо наоборот (миллиард раз сходить в правую, а не миллион в левую)
-
IN тоже использует hash алгоритм, но в данном примере, дополнительно используется ещё и PK.
-
я понимаю.
и да я ошибся. HJ быстрее.
И особо ничего сделать нельзя. Вертика умеет за счет статистики понять что выборка из левой вернет мало строк и построить hash по ней, и это все что можно наоптимизировать на миллиадах. (делает как обычно хреново, хинтую) -
Коллеги, вопрос.
Есть таблица secret.t1.
Есть схема view, для неё юзер view с настройками:
<view>
<password></password>
<profile>view</profile>
<allow_databases>
<database>view</database>
</allow_databases>
</view>
Пользователь view - readonly.
Есть таблица view.t1 ENGINE = Merge(secret, 't1'). В версии 18.6.0 из неё можно читать этим юзером, а в 18.14.15 - нет.
Вопрос задачи - что делать? Я где-то пропустил настройки какие-то? -
За движок таблиц Join -- спасибо, попробую. Иначе придется делать UPDATE, что в случае ClickHouse -- тоже плохо.
-
Стало больше мест, где проверяется доступ к базам данных - проверяется также внутри Merge таблиц?
-
Так правильно, потому что иначе пользователю достаточно самому создать View, чтобы получить доступ.
-
Joined.
-
Обходные способы не знаю - можно вместе подумать.
-
А Distributed таблица также проверять ACL будет?
-
Нет, она пойдёт под тем пользователем, который прописан в конфигурации кластера.
-
Кто-нибудь знает, таблица с движком Join хранится в памяти в сжатом виде или нет?
-
-
Добрый вечер, подскажите пожалуйста как писать данные с nested arrays через JDBC ?
-
Можно попробовать через RowBinaryStream, передав setObject(i, Collection<Collection>)
-
Но сходу не проверю
-
у JDBC (java) нет мапинга для вложенных массивов.
select [[1,1]]
java.lang.RuntimeException: Parse exception: ByteFragment{[[[1,1]]], start=0, len=7}
наверное формировать sql как строку в TSV например -
а есть англогязычный тг-канал кликхауза? я бы туда отправил пару знакомых
-
@clickhouse_en
-
thx!
-
множественный джойн дает более правильный результат, это как-то странно.
set join_use_nulls = 1
select t.a, s.a, y.a,y.b from t left join s on (t.a = s.a and t.b = s.b) left join y on (y.a = s.a);
┌─t.a─┬──s.a─┬──y.a─┬──y.b─┐
│ 1 │ 1 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
│ 2 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
└─────┴──────┴──────┴──────┘
убираю третью таблицу и null превращается в неправильный 0, и меняется имя поля
select t.a, s.a from t left join s on (t.a = s.a and t.b = s.b)
┌─a─┬─s.a─┐
│ 1 │ 1 │
│ 2 │ 0 │
└───┴─────┘ -
-
есть сложности с разруливанием полных имен приходящих из правой и левой части джойна (например джойн сам на себя). множественный джойн решает эту проблему неявно подставляя всем именам (у которых еще нет) алиасы, а потом снимает лишние в выдаче. Поэтому все работает как если бы у колонки был алиас
-
сами имена полей не особо меня волнуют.
А вот проблема с 0, в полях по которым джойним это древний баг. Просто забавно что множественный джойн дает более правильный результат -
-
Добрый вечер. Столкнулся со странной проблемой… Делаю ALTER TABLE … ADD COLUMN … получаю:
Received exception from server (version 18.16.1):
Code: 341. DB::Exception: Received from ch626308:9000, 10.149.163.72. DB::Exception: Alter is not finished because timeout when waiting for some replicas: ch626308 (replication_alter_columns_timeout = 60). Alter will be done asynchronously..
0 rows in set. Elapsed: 60.021 sec. -
-
-
-
-
-
нет, тогда ошибка была бы точно другой
-
в смысле сервер ch626308 сам не выполнил alter у себя?
-
хз, но похоже на то
-
Альтер зарегистрировался, но реплика его не скачала и не выполнила.
Это фича 18.16.1
сделайте detach/attach таблице -
ну альтер вроде реплицируемая операция. не выполнилась нигде
-
-
-
-
-
-
-
Joined.
-
Нет, это не фича, это “фича” 🙂
Мы все надеемся, что в 19.х.х ее нет -
Ааааа :)) Спасибо, Татьяна!
-
-
-
Было несколько штук про репликацию, которые закрыты уже. Конкретно про alter не знаю
-
Пытаюсь дамп развернуть
clickhouse-client --host="localhost" --port="9000" --user="default" --max_threads="1" --query="INSERT INTO db.$table FORMAT Native" < "/home/$table-dump-$today.native"
Гдето все ок, где то Bad cast, где вообще ни записей ни ошибок
Както не прозрачно все ) -
Правда дамп снимается со старой версии и накатывается на новую, как переносить данные - непонятно
-
Прошу подсказки у знатоков. Есть ли смысл использовать clickhouse для мессенджера? Использовал его для аналитики gps координат - скорость впечатлила.
-
что-то где-то в чате проскакивала такая идея, КХ не особо подходит для хранения длинных текстовых строк
-
Больше интересует хранение аудиозаписей. Данная реализация возможна?
-
зачем их хранить в КХ?
Вы их будете хранить во внешнем хранилище, а в КХ имя файла или ID - 02 March 2019 (61 messages)
-
Joined.
-
-
А что такого? Это тож самое, что хранилище на s3, где мета информация сохраняется в мускуль, только с той разницей, что id файла будет ещё в кх попадать
-
-
А профит-то в чем ? В целом, идея прям плохая.
-
Just for fun
-
Копир не сможет помочь? https://clickhouse.yandex/docs/en/operations/utils/clickhouse-copier
-
Ну нет, тут проще работать с экстентами и в базе хранить inode и sblock, как принято в dfs
-
Господа, а где-нибудь описана интерпретация планов выполнения запросов CH?
-
Ну ты читаешь в логе что как и куда и интерпретируешь
-
Или вы хотите чтобы читал в логе за вас ии?
-
Joined.
-
Оценить стоимость сложно
-
Ну если вам сложно то ии тем более он же тупой
-
Если не можете прочитать, просто опытным путем посмотрите
-
Уважаемые чатовцы, подскажите как быть: если сделать большой дисковый кэш - медленно выполняются инсерты, а если сделать маленький - при SELECT и O_DIRECT часто возникает ошибка доступа к файлу.... сделал средний - теперь и инсерты медленные и ошибка доступа появляется.. где та тонкая грань?
-
думаете почему почему в названии канала "Не тормозит"?
Потому что не указано, селекты или вставки не тормозят, так и живём.
Может у вас с методологией чего не так? Много инсертов мелких? -
Батчи по 300к строк, 25 колонок раз в 20-30 секунд ... И я знаю почему чат называется именно так
-
Какой то затык, как преобразовать юникс таймстемп в Date Time. Беру toDateTime(1551523615581) и он делает даты в 2002 году. Раньше писал всегда даты как строки и парсятся они нормально. Решил переделать на числа чтобы места меньше было и какая то фигня
-
у вас timestamp кривой
-
милисекунды лишние
-
От блин, спасибо
-
Столкнулся со странным поведением — преобразование datetime при реплицировании
- сначала на машинах 1 и 2 была создана реплицируемая таблица (Обычный ReplicatedMergeTree)
- на машинах 1 и 2 был не установлен timezone (по-умолчанию UTC)
- после реплицируемая таблица была создана на машине 3 имеющую конфиг timezone: Europe/Moscow
Проблема: SELECT datetime FROM table на машине 3 у всех строк на 3 часа больше, хотя бинарные данные таблиц одинаковые на всех машинах
Нашёл два решения:
1. На машине 3 убрать настройку timezone — SELECT сразу начинает показывать правильную дату
2. Полностью уничтожить все 3 реплики и узел зукипера.
На всех 3х машинах поставить timezone: Europe/Moscow
Заново создать реплицируемые таблицы на всех 3х машинах
Описаное выше поведение выглядит неправильным, и оба текущих решения не устраивают.
Теряюсь в догадках в какую ещё сторону посмотреть) -
так не должно быть.
как вы меняете размер кеша? Что вы вообще подразумеваете под этим?
Какая ошибка, точно (копи пейст)?
O_dicrect по умолчанию включается на файлах больше 10гб (можно его выключить вообще).
какая фс? -
Воспроизводится довольно легко
https://gist.github.com/nezed/78bc357335b970901bb8a98b117704ee -
ваш клиент (jdbc?) конвертирует даты в зависимости от таймзоны на сервере. Это можно выключить. Но наверное проще иметь utc на всех репликах.
-
http/clickhouse-client/redash
-
ну да, так работает jdbc драйвер кх. Там в настройках можно сказать что не смотри tz на сервере используй msc.
-
Там такие же настройки.
-
Вот так когда реплики были изначально созданы с одинаковыми timezone
-
У клиента есть настройка use-server-timezone
-
(Чиню скриншот)
Вот так выгдялит запрос ch-client когда реплики с разными timezone -
-
Да, клиенты переводят в свою таймзону из таймзоны сервера. На втором скрине похоже у клиента moscow у сервера utc.
-
На скрине две тачки. ch1 действительно UTC - и к нему нет претензий.
ch3 - Мск, и время поломано.
На первом скрине ch3 - тоже Мск
Можете посмотреть как воспроизводится
https://gist.github.com/nezed/78bc357335b970901bb8a98b117704ee -
На двух скриншотах для машины с ch3 с одной и той же конфигурацией и клиента и сервера разное поведение
-
-
Под большим дисковым кэшем вы понимаете большие значения vm_dirty*? Его размер должен быть согласован со скоростью записи на диск. Чем выше скорость записи, тем больше можно делать кэш "грязных" страниц. Если сделать слишком большой кэш для медленных дисков, то получите периодические задержки на (cache_size_in_bytes/disk_write_speed_bytes_per_second) секунд, когда операционка будет скидывать содержимое кэша на диск. Например, если размер кэша - 10ГБ, а максимальная скорость записи на диск - 100МБ/с, то получаются задержки до 10000/100=100 секунд.
Что касается ошибок при O_DIRECT, то это выглядит как баг на стороне КХ, который нужно зарепортить и пофиксить -
Спасибо, сразу видно телепата в действии, да, речь о dirtycache
-
yandex/ClickHouse was tagged: v19.3.6-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.3.6-stable
Release notes:
v19.3.6-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Про O_DIRECT уже есть тикет на failback фичу: https://github.com/yandex/ClickHouse/issues/4449Fallback from O_DIRECT · Issue #4449 · yandex/ClickHouse
ClickHouse uses O_DIRECT for big merges. It is controlled by min_merge_bytes_to_use_direct_io MergeTree setting and is set by default to 10 GiB. O_DIRECT doesn't work for encrypted filesyst...
-
-
Что за ошибка доступа?
-
Да, у нас в длинном списке есть задача - делать fsync после записи больших кусков, либо асинхронно - при удалении старых, оставшихся после мержа, делать fsync того, что помержено.
(просто так на каждый кусок не получается, так как много файлов, и от многих вызовов fsync очень плохо) -
-
Никто не сталкивался что при использовании Кафка движка данные в основную mergetree таблицу приходят только когда клиент перестает писать в топик. Пока пишет то новых данных нет, как прекратил то появляются. В топике данные приходят если смотреть Кафка консолью. Думаю как то связано с размером буфера который заполняется но с дефолтными настройками он должен сбрасываться все равно по таймайту который по умолчанию пару секунд.
-
там вроде не работает таймаут по умолчанию
-
Ого, как то не прикольно.
-
Попробую тогда буфер уменьшит, а то в PoC данных не особо много.
-
блин, забыл, что в КХ таблице может быть много колонок, и, соответственно, много файлов, которые нужно синкать. В victoriametrics только две колонки, поэтому там периодический fsync при мерже нормально работает. Для КХ такая стратегия может не подойти, но все равно стоит попробовать. Может, не так страшен частый вызов fsync, как его малюют )
-
-
так не гарантирует. При внезапном ребуте сервера возможна потеря данных, именно поэтому неактивные парты удаляются через 10мин ) , и если нужна страховка надо ждать записи в две реплики https://clickhouse.yandex/docs/en/operations/settings/settings/#settings-insert_quorum
-
-
Можно ли как то установить max_insert_block_size на уровне таблицы или это только для всего КХ. Вижу что можно вппофайле указать, но с кафки в мержтрии сам кликхаус делает.
-
специально для вашей проблемы есть для кафка таблиц настройка
18.16.0 Для движка таблиц Kafka: проверка наличия подписок перед началом чтения из Kafka; настройка таблицы kafka_max_block_size. -
Но его тоже можно на уровне всего КХ устанавливать а не для разных таблиц разное значение ?
-
Я был неправ т.к. не понимал что при вставке даты она приводится и хранится в UTC
Спасибо! -
Привет, в ReplacingMergeTree если указать несколько ключей то уникальность будет проверяться по всем ним?
-
Подскажите. Materialuzed vview обновляется на инсерт?
-
Да.
-
В ReplacingMergeTree невозможно указать несколько ключей. Наверное вы имеете ввиду составной ключ - состоящий из нескольких столбцов. В этом случае проверяется равенство одновременно всех указанных столбцов (то есть, равенство кортежей).
- 03 March 2019 (46 messages)
-
Друзья, помню была волна, когда некий бот сканил IP, находил кликхаус и дропал базы, напоминал, так сказать, что не стоит пароли оставлять дефолтные.
На сервантах доступных из интернета, кроме смены паролей нужно ещё какие-то действия принимать? -
Закрыть все фаерволом
-
у меня помимо паролей и файрволла прикрыто ssl-авторизацией на фронте
-
Так там тисипи же
-
будут коннекты с другого сервера, могу, конечно, всем кроме него запретить.
И возможно, коннекты с локальной машины, там IP динамический, но думал, что можно например SSH-туннель сделать.
Доступ по http не нужен, просто портам нули в конфиге указать? -
Так по дефолту все запрещено , указывать только те порты что хотите конкретному айпи открыть
-
tcp у меня вообще для локалки только
-
yandex/ClickHouse was tagged: v19.1.10-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.1.10-stable
Release notes:
v19.1.10-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
-
а какая разница тисипи или хттп
-
вы попробуй прочитать вообще что значит merge tree, ничего там в кх не зависает просто устройство таблицы непозволяет писать по одной записи
-
просто пишите сразу большими блобами
-
каждый инсерт создает новый парт, парты в бекграунде мержатся в более крупные.
если мелких инсертов слишком много, мерж процесс не успевает, и парты копятся
если партов становится 150, КХ паузит инстерт на 1 сек.
если партов 300, инсерт падает с ошибкой too many parts.
150, 1 сек, 300 -- это параметры которые настраиваются.
можно их заменить например на 15000 и 0, 30000 ? Можно, тогда select -ы начнут работать мееееедддддлееенннноо. -
-
неправильно
insert into t values (1);
insert into t values (2);
правильно
insert into t values (1), (2); -
Joined.
-
бот
-
вернее 2
-
Joined.
-
Привет. Кликхаус перестает отвечать на 8123 порту. Пробовал версии 19.3.5, 19.3.6, 19.1.10. Запускаю через docker. В логах ничего полезного нет. Или я не туда смотрю?
root@652f42e256bd:/var/log# cat /var/log/clickhouse-server/clickhouse-server.err.log
2019.03.03 22:24:58.807875 [ 1 ] {} <Error> Application: Listen [::]: 0: DNS error: EAI: -9 If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
root@652f42e256bd:/var/log# tail -n 5 /var/log/clickhouse-server/clickhouse-server.log
2019.03.03 22:27:19.014939 [ 30 ] {0ec8aa71-aaaa-44a7-836c-2d45e7f32943} <Debug> MemoryTracker: Peak memory usage (for query): 92.84 MiB.
2019.03.03 22:27:19.015087 [ 30 ] {} <Information> HTTPHandler: Done processing query
2019.03.03 22:27:25.956003 [ 28 ] {} <Trace> SystemLog (system.part_log): Flushing system log
2019.03.03 22:27:25.958148 [ 28 ] {} <Trace> system.part_log (Data): Renaming temporary part tmp_insert_201903_3_3_0 to 201903_3_3_0.
2019.03.03 22:29:45.692389 [ 22 ] {} <Information> TCPHandler: Done processing connection.
Как понять, почему ClickHouse виснет? -
Какая вообще версия стабильная?
-
docker ps
показывает что контейнер жив? может КХ сервер упал или убит OOM-м. -
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
652f42e256bd yandex/clickhouse-server:19.1.10 "/entrypoint.sh" About an hour ago Up About an hour 0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp, 9009/tcp some-clickhouse-server -
curl -vvvv localhost:8123 ?
-
clickhouse-client продолжает работать нормально
-
$ curl localhost:8123 висит и ничего не говорит
-
$ curl -vvvv localhost:8123
* Rebuilt URL to: localhost:8123/
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8123 (#0)
> GET / HTTP/1.1
> Host: localhost:8123
> User-Agent: curl/7.54.0
> Accept: */*
> -
в логах внутри контейнера появились записи о том, что куски смержились
-
то есть сломался только HTTP-интерфейс
-
интересно, а
curl localhost:9000 -
$ curl localhost:9000 молчит.
-
но вот так работает:
$ docker run -it --rm --link some-clickhouse-server:clickhouse-server yandex/clickhouse-client:19.1.10 clickhouse-client --host clickhouse-server
ClickHouse client version 19.1.10.
Connecting to clickhouse-server:9000.
Connected to ClickHouse server version 19.1.10 revision 54413.
652f42e256bd 🙂 -
а если из контейнера
docker exec -it 652f42e256bd /bin/bash
wget -O- localhost:8123 -
Из контейнера работает
# wget -O- localhost:8123
--2019-03-03 23:32:16-- http://localhost:8123/
Resolving localhost (localhost)... 127.0.0.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:8123... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4 [text/html]
Saving to: ‘STDOUT’
- 0%[ ] 0 --.-KB/s Ok.
- 100%[==============================================================================================>] 4 --.-KB/s in 0s
2019-03-03 23:32:16 (21.6 KB/s) - written to stdout [4/4] -
То есть возвращает Ok.
-
а что показывает select uptime()
-
652f42e256bd 🙂 select uptime()
SELECT uptime()
┌─uptime()─┐
│ 4254 │
└──────────┘
1 rows in set. Elapsed: 0.004 sec. -
правду показывает. чуть более часа назад контейнер создал и запустил скрипт миграции данных
-
и он почти сразу упал
-
что значит упал?
-
кто?
-
скрипт ошибку выдал [2019-03-04 00:27:21 +0200] [55717] [ERROR] ClickHouse ServerDisconnectedError: None.
-
и после этого localhost:8123 вечно грузится и ничего не возвращает
-
ну это похоже на проблему докера, а не КХ. Я бы обновил докер например.
И начал гуглить docker port forward fails after some time -
возможно, спасибо
- 04 March 2019 (120 messages)
-
Есть возможность запустить с --net=host? Тогда форвардинг не используется
-
Добрый день! Подскажите пожалуйста, в таблице ClickHouse есть поле DateTime в формате YYYY-MM-DD HH:mm:ss, с помощью функции toYYYYMMDD() берется только дата и по этому новому полю создаются партиции. Это нормально, что каждый день создается более одной партиции? (от 3 до 6). Можно ли как-то задать число партиций в день? Система состоит из 2ух реплик и 2ух шардов, и на каждом сервере создано по Distributed table
-
Вы куски с партициями не путаете?
-
Партиция должна быть одна, а вот партов создаэтся на каждый инсерт. Потом они мерджятся.
-
По некоторым причинам в конце может остаться больше одного парта, к примеру из-за превышения размера парта на мердж.
-
Запрос на выдачу партиций выглядит так
SELECT partition, table, database FROM system.parts WHERE active AND database = 'logs'; -
-
parts != partitions
-
-
это именно куски(Parts)
-
сагрегировать, например так:
SELECT partition,formatReadableSize(size) AS size,rows,days,formatReadableSize(avgDaySize) AS avgDaySize FROM(SELECT table,partition,sum(column_bytes_on_disk) AS size,(sum(rows)) AS rows,min(min_date) AS min_date,max(max_date) AS max_date,max_date - min_date+1 AS days,size / (max_date - min_date +1) AS avgDaySize FROM system.parts_columns WHERE active GROUP BY table,partition ORDER BY rows DESC) -
-
да, но это куски
-
-
Привет. Подскажите, как можно узнать, сколько занимает в памяти и на диске таблица с движком Join?
-
-
rowNumberInAllBlocks ищите
-
Да, видел ее. Но как я понял, она возвращает номер строки в блоках данных, по которым осуществлялась выборка, а мне нужен номер строки в итоговой выборке)
От 1 до колва полученных строк -
Я тоже так думал сначала. У меня все правильно отработало в итоге
-
Хмм. Значит я что-то не так делаю
-
-
-
а вчем проблема? наверное, в сортировку добавить номер строки еще надо
-
Кто знает есть ли какое-либо отличие toUnixTimestamp от toUInt64 от времени?
-
Для toUnixTimestamp 0 = 1970-01-01 00:00:00, а для toUInt64 0 = 0, например такое отличие
-
Всем привет. А кому-нибудь удалось обеспечить приватность данных на кластере?… У меня 15 шардов, в шардах локальные таблицы, поверх натянуты distributed. Хочу изолировать эту всю прелесть от внешнего мира и пускать только конкретных «пользователей» что бы это ни значило. В общем и целом - просто ограничить доступ
-
-
Мне кажется это только взбодрит чат
-
надо бы админам продумать правила и прописать их в шапке. имхо.
-
если постить в этом чате, то в каком виде. или в отдельный чат/канал
-
Окей :) Ну удалят так удалят.
Компания: https://airpush.com
Полностью удаленная работа, fulltime.
Описание вакансии:
DevOps Data Engineer
We're looking for a devops engineer to help us maintain and scale our data backend and infrastructure. As an engineer you'll be responsible for caring for and feeding our servers, monitoring them, and scaling the infrastructure as we grow. Like every member of the Airpush team you'll also be involved in making decisions about product development and the user experience.
You'll be:
• Taking responsibility for our data layer stability and performance.
• Working together with BI to optimize analytics queries.
• Scaling our physical and cloud infrastructure as the product grows.
• Developing and improving our monitoring and reporting system.
• Automating everything.
• Participating in high level design decisions about our platform & product.
• Working with a team of intelligent developers who are passionate about the platform and ad-tech.
You have:
• Hands on experience in some combination of engineering/building systems/test automation.
• Hands-on experience with server-side development and deployment (Kafka, MySQL, ClickHouse, Redshift, Hazelcast, Zookeeper, etc.).
• Experience coding in Python, Java or Go (preferred).
• Experience in managing databases and writing queries in SQL.
• Strong troubleshooting and debugging skills.
• Experience with physical servers as well as cloud providers (AWS, Google Cloud, etc.).
• Experience with configuration management and automation tools.
What wouldn't hurt:
• An interest in automating yourself out of a job.
• An interest in working in a rapidly-growing environment and helping us create a strong dev culture. -
Ребят, подскажите а есть способ заставить кх перерасчитывать materialized expression
-
Думаю, в КХ единственный способ - контроль на программном уровне. Искал сам долго, но ничего не смог найти. Способа разделить доступ к таблицам пользователям/ролям пока нет.
-
Всем привет. Подскажите есть ли аналоги tableau но чтобы можно было первое время бесплатно и в докере, нужно для PoC чтобы быстро и легко прикрутить для бизнеса УИ красивый к кликхаус.
-
По моему в конфигах есть возможность ограничить к "схеме", разве нет?
<read_user>
<password></password>
<profile>web</profile>
<quota>default</quota>
<allow_databases>
<database>test</database>
</allow_databases>
</read_user> -
Но ведь не к конкретной таблице, к сожалению.
-
Это да. Просто под каждую конкретную задачу, надо своё колесо изобретать. Или на програмном уровне. Если там репликации нету, можно например в однельной схеме создать мат вью и дать доступ только к этому. В теории, сам не пробовал
-
Довольно хлопотно делать разделение доступа средствами КХ. На мой взгляд проще реализовать программно.
-
Вы его поменяли alter-м ? Или у вас нечистая функция?
alter update / clear column или использовать alias вместо materialized. -
у меня функция расчета вероятности из catboost модели, соотвественно при изменении модели хотелось бы чтобы мат выражение пересчитывалось
-
Привет!
Нубский вопрос)
Что-то не могу найти в доках. Есть ли нативный метод выгрузки данных из pg в кликхаус? Сейчас делаю через промежуточный файлик (copy из pg на диск, а потом через clickhouse-client на диск).
Каким-нибудь питоном сздавать сессию в pg и в цикле выбирать батчами данные, а потом через либу писать их в ch, мне кажется, не очень удобно и быстро. Мб есть в ch нормальный способ переноса данных? -
Ребят, а подскажите как работает materialized expression. Я предполагаю что результат функции (expression) при 1 select будет записан на диск и следующие запросы будут выполняться быстрее, т.к берут уже готовые данные с диска
-
select не меняет файлы.
materialized expression вычисляется каждый раз если в парте колонка не записана.
insert и мерж вычисляют materialized expression и записывают в файл. -
Я правильно понимаю, что если я добавлю материализованню колонку в таблицу то для всех данных которые в ней были эта коклонка будет перерасчитываться каждый раз а для новых данных браться из памяти?
-
после добавления колонки (materialized / default) она будет рассчитываться при каждом select для старых данных,
она будет материализована и записана на диск для новых данных, также она будет материализована и записана на диск при мерже старых данных. -
к девопсерам не ходили ? Вакансии и поиск работы: @devops_jobs
-
Там не очень адекватные люди 🙂 мы искали по осени девопса и я туда один раз заглянул с предложением о работе) пожалел очень. Выхлоп ниже среднего, зато долго пришлось разгребать поток кхм.. сообщений
-
Спасибо
-
select number%13 n, rowNumberInAllBlocks() from numbers(100) order by n limit 10
select n, rowNumberInAllBlocks() from (select number%13 n from numbers(100) order by n ) limit 10 -
create table XXX (d Date) Engine = MergeTree partition by d order by tuple();
insert into XXX(d) values(yesterday());
alter table XXX add column a Int64 materialized 6;
insert into XXX(d) values(today());
select d,a from XXX;
optimize table XXX partition yesterday() final;
alter table XXX modify column a materialized 7;
select d,a from XXX;
alter table XXX clear column a in partition yesterday();
optimize table XXX final;
select d,a from XXX;
alter table XXX clear column a in partition today();
select d,a from XXX; -
Joined.
-
С вебмордой есть несколько. Попробуйте redash
-
-
-
Есть, но насколько я понимаю - ещё не на подходе.
-
Спасибо, вот как раз пытаюсь под мак завести это все используя их скрипт для докера
-
Мне бы чуточку больше конкретики
-
https://clickhouse.yandex/docs/en/roadmap/
Q3 2019¶ Fine-grained authorization -
-
-
Относительно простое разделение прав (на уровне - список разрешенных баз, можно ли инсерты, можно ли ddl) есть сейчас. В планах (кажется на Q3 2019) есть разработка более гибкой модели, что-то типа ACL если я правильно понимаю
-
Вообще я осознаю как это сделано в оракле и например в информиксе, и фича на самом деле очень сложна, особенно в плане перфоманса, если нарезать права по колонкам (при создании сессии вычисляются права для каждого объекта и сохраняются в памяти сессии), и все равно есть ручки, типа выключить точную проверку прав для view (для перфоманса. Ну и в оракле и в информиксе у view два типа авторизации возможны на таблицы внутри view -- по создателю / по текущей сессии).
-
Добрый день.
Смущает поведение ANY LEFT JOIN с аггрегациями. Если в таблице справа от JOIN нет записи, то в поле оказывается значение 0 вместо NULL.
Пример.
В первой таблице две записи
INSERT INTO `users` (`user_id`)
VALUES ('1'),
('2');Во второй таблице одна запись
INSERT INTO `purchases` (user_id, item_id, price) VALUES ('1', '1', 1);
Когда происхдит выборка с LEFT JOIN и аггрегацией:
SELECT `user_id`, `price_sum`
FROM `users` ANY
LEFT JOIN (SELECT `user_id`, sum(`price`) AS `price_sum`
FROM `item_purchased_events`
GROUP BY `user_id`) USING `user_id`;
В ответе для второго айди, которому не соответствует ни одна строка в запросе справа, находится значение не NULL, но 0.
Вот так:
user_id price_sum
1 212121
2 0
По аналогии с SQL ожидался NULL для значений, которых нет в запросе справа.
Искал в документации - нашел только про join_use_nulls (https://clickhouse.yandex/docs/en/query_language/select/#null-processing_2),
но ничего прямо указывающее на подобное. Допускаю, что плохо искал.
Подскажите, пожалуйста, это ожидаемое поведение? Это где-то документировано?
Заранее спасибо.SELECT QuerySELECT Query SELECT queries perform data retrieval. By default, the requested data is returned to the client, while in c
-
спасибо. Но, к сожалению, в текущей схеме мы свои задачи никак решить не можем. Будем ждать… А пока закостылим, наверное, как-то со стороны клиентов
-
-
так оно и есть join_use_nulls
set join_use_nulls = 1;
┌─user_id─┬─price_sum─┐
│ 1 │ 1 │
│ 2 │ ᴺᵁᴸᴸ │
└─────────┴───────────┘
или костыль CAST(sum(price), 'Nullable(Float64)') AS price_sum
┌─user_id─┬─price_sum─┐
│ 1 │ 1 │
│ 2 │ ᴺᵁᴸᴸ │
└─────────┴───────────┘
join_use_nulls неправильно работает для полей по которым джойнится (USING (user_id)), скоро пофиксят (это легко обойти). -
Большое спасибо. Праивльно ли я понимаю, что в случае, когда join_use_null = 0 поведение, которое я вижу, является корректным и ожидается в дальнейшем? В моем случае это очень удобное поведение.\
-
если бы от меня зависело (я не разработчик КХ и не имею отношения к Я), то с точки зрения маркетинга я бы конечно поставил set join_use_nulls = 1 по дефолту прямо сейчас.
-
чем дальше, тем больнее исправлять нестадартное поведение, а таблу и миллиарду других тулов пофиг на КХ.
-
Простите, что вмешиваюсь, но мне кажется проще избавится от NULL значений изначально. Так надежней и проще.
-
о чем вы? Про конретное приложение или про КХ? КХ вроде двигается к полноценной стандартной ANSI SQL поддержке NULL (год назад null-в в КХ вообще не было, отсюда все костыли -- типа join_use_nulls)
-
Конкретное приложение, использующие КХ нельзя рассматривать отдельно друг от друга. Потому мое предложение касалось обоих. Данные в аналитической СУБД, которой является КХ, лучше вставлять уже без NULL, тем более таблицы с Nullable занимают больше места, чем хотелось бы.
-
чего? о чем вы? У топикстартера не хранятся null. У него sql запрос возращает неверный результат (с точки зрения ANSI комитета)
-
Мне глубоко пофиг на SQL и ANSI и на КХ. Но с точки зрения маркетинга для КХ нужно двигаться в сторону стандарта SQL, а не изобретать мили и фаренгейты.
-
Ваша позиция понятна, но относительно КХ нужно просто правильно использовать то, что есть в наличии. СУБД развивается и требовать от нее абсолютного соответствия несколько преждевременно.
-
-
я ничего не требую, я просто ответил на вопрос изменится-ли текущее поведение (дефолтная настройка join_use_nulls), так вот я думаю -- да, изменится.
-
Mea culpa. Не правильно Вас понял.
-
Ответ: создать вьюху в мускуле с нужными условиями
-
Большое спасибо.
-
К сожалению, в случае LEFT JOIN избавиться от нулов не так-то просто. Иногда необходимо отличать отсутствие значения справа от его наличия или нулевого значения.
-
Стоит попробовать тогда отличить null in DateTime & 1970-01-01 00:00:00. Не всегда это однозначно удается.
-
Да. Именно про подобное я и говорю.
-
-
Joined.
-
-
Я видимо не совсем догоняю как argMax устроен, подскажите как его вместе с группировкой использовать?
Есть таблица timestamp, userid и другие колонки, пытаюсь сгруппировать по пользователю, и через argMax получить по одной последней записи на каждого, но не выходит. Что я делаю не так?
SELECT
argMax(StatsDateTime, StatsDateTime) as time
, User
FROM db.stats
GROUP BY StatsDate, StatsDateTime, User
ORDER BY StatsDateTime DESC -
Рекомендовал бы группировать по пользователю
-
Правда, не совсем понятна логика..
-
argMax выберет значение первого параметра при максимальном значении второго параметра. т.е. например у вас пользователь посетил 2 URL (колонка page_url)
при запросе select user_id, argMax(page_url, timestamp) from ... group by user_id вы получите последнюю посещенную страницу для каждого юзера -
Мне кажется нужен анализ посещаемости страниц...
-
Пользователей нет, я подменил сущности для простоты, есть события с показателями по устройствам, и надо определять отклонения показателей за последние 5 минут, по отношению к среднесуточным. И иногда просто последние записи, чтобы показать как "текущие"
-
А можно узнать суть задачи? Возможно есть более простые пути решения. Не претенду, конечно, но не исключаю.
-
Так я собственно её описал
-
Вы уписали варинт решения, но не задачу.
-
Попробуйте формализовать ее (задачу) абстрактно.
-
Всем привет.
Выполнили clear column. И похоже так сложилось, что в этот момент, как раз мерджились парты в этой партиции.
В итоге мердж и clear column висят уже более 5 часов.
Как быть? Можно ли рестартануть эту реплику?
kill query не помогает
Из сервера идет дым, io 100% -
detach / attach table ?
-
прям весь table? там 5ТБ данных)
-
https://clickhouse.yandex/docs/ru/query_language/misc/#detach
Удаляет из сервера информацию о таблице name. Сервер перестаёт знать о существовании таблицы.
Но ни данные, ни метаданные таблицы не удаляются. При следующем запуске сервера, сервер прочитает метаданные и снова узнает о таблице. Также, "отцепленную" таблицу можно прицепить заново запросом ATTACH (за исключением системных таблиц, для которых метаданные не хранятся). -
А мердж отменится при этом?
-
2019.03.04 20:46:54.821853 [ 10 ] {} <Debug> table (ReplicatedMergeTreeQueue): Can't execute command for range 201901_0_533609_999999999 (entry queue-0002125745). There are 1 currently executing entries blocking it: MERGE_PARTS part 20190128_20190131_480513_533569_14,
-
вот такая ошибка
-
в system.merge есть этот парт elapsed у нее 32562
у clear column 17724 -
Определять отклонения текущих показателей от среднесуточных
-
Лучше идти от медианы. Она точнее.
-
Согласен, вопрос как оптимальнее сделать такой запрос
-
Было бы удобней видеть исходные данные. Если это не противоречит ... сути задачи.
-
Даже не даные видеть, а только логику их обработки.
-
Select deviceid, avg(metric) as daily_average, avgIf( metric, timestamp > now() - INTERVAL 5 MINUTE) as last_five_min_average, last_five_min_average/daily_average from table where timestamp > now() - interval 24 hour group by deviceid
Замените avg на нужную функцию, если нужно значение в последней точке - используйте argMax вместо avgIf -
Благодарю, попробую
-
Похоже на какой-то deadlock. Можете по логам подробно восстановить последовательность событий? Может быть удастся воспроизвести и починить.
-
Разобрались. Оказалось, что 9 часов шел merge больших кусков
-
когда мердж закончился - clear column прошел
-
осталось понять почему merge занял 9 часов
-
Да, многовато. А насколько велик кусок? Может быть диск медленный?
-
вот как раз разбираемся
-
объема там большие. Вполне может быть 1-2ТБ кусок
-
подкручено ограничение на макс. размер куска? В принципе 2 тб за 9 часов - это примерно 60мб/сек. Что конечно не является впечатляющим результатом, но и чем-то из ряда вон выходящим это тоже не назову.
-
я регулярно наблюдаю как на загруженных селектами на 100% hdd куски по 150ГБ мержатся по 20 часов. Тут ничего удивительного нет, если чтобы просто прочитать 512 байт уходит 250мс.
- 05 March 2019 (170 messages)
-
как лечить? 2019.03.05 01:22:40.535852 [ 6 ] {} <Trace> DB_NAME.TABLE_NAME (StorageReplicatedMergeTree): Executing log entry to mutate part 20180411_20180411_0_0_0_8 to 20180411_20180411_0_0_0_9
2019.03.05 01:22:40.536493 [ 6 ] {} <Debug> DB_NAME.TABLE_NAME (SelectExecutor): Key condition: unknown
2019.03.05 01:22:40.536527 [ 6 ] {} <Debug> DB_NAME.TABLE_NAME (SelectExecutor): MinMax index condition: unknown
2019.03.05 01:22:40.536542 [ 6 ] {} <Debug> DB_NAME.TABLE_NAME (SelectExecutor): Selected 0 parts by date, 0 parts by key, 0 marks to read from 0 ranges
2019.03.05 01:22:40.536572 [ 6 ] {} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2019.03.05 01:22:40.536641 [ 6 ] {} <Trace> Aggregator: Aggregating
2019.03.05 01:22:40.536669 [ 6 ] {} <Trace> Aggregator: Aggregation method: without_key
2019.03.05 01:22:40.536697 [ 6 ] {} <Trace> Aggregator: Aggregated. 0 to 1 rows (from 0.000 MiB) in 0.000 sec. (0.000 rows/sec., 0.000 MiB/sec.)
2019.03.05 01:22:40.536713 [ 6 ] {} <Trace> Aggregator: Merging aggregated data
2019.03.05 01:22:40.536747 [ 6 ] {} <Trace> virtual DB::MergingAndConvertingBlockInputStream::~MergingAndConvertingBlockInputStream(): Waiting for threads to finish
2019.03.05 01:22:40.536789 [ 6 ] {} <Trace> DB_NAME.TABLE_NAME (MergerMutator): Part 20180411_20180411_0_0_0_8 doesn't change up to mutation version 9
2019.03.05 01:22:40.536839 [ 6 ] {} <Debug> DB_NAME.TABLE_NAME (Data): Cloning part /database/clickhouse/data/DB_NAME/TABLE_NAME/20180411_20180411_0_0_0_8/ to /database/clickhouse/data/DB_NAME/TABLE_NAME/tmp_clone_20180411_20180411_0_0_0_9
2019.03.05 01:21:56.712125 [ 7 ] {} <Error> DB_NAME.TABLE_NAME (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 107, e.displayText() = DB::Exception: /database/clickhouse/data/DB_NAME/TABLE_NAME/tmp_clone_20181112_20181130_0_16_1_25/duration_ms.bin doesn't exist, e.what() = DB::Exception, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x568fcb6]
1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1f) [0x29b94cf]
2. clickhouse-server(DB::MergeTreeDataPartChecksum::checkSize(std::string const&) const+0x86) [0x51c72d6]
3. clickhouse-server(DB::MergeTreeDataPartChecksums::checkSizes(std::string const&) const+0x51) [0x51c7581]
4. clickhouse-server(DB::MergeTreeDataPart::checkConsistency(bool)+0x1d4) [0x51bcc24]
5. clickhouse-server(DB::MergeTreeData::cloneAndLoadDataPart(std::shared_ptr<DB::MergeTreeDataPart const> const&, std::string const&, DB::MergeTreePartInfo const&)+0x47b) [0x519930b]
6. clickhouse-server(DB::MergeTreeDataMergerMutator::mutatePartToTemporaryPart(DB::MergeTreeDataMergerMutator::FuturePart const&, std::vector<DB::MutationCommand, std::allocator<DB::MutationCommand> > const&, DB::Context const&)+0x651) [0x51b0181]
7. clickhouse-server(DB::StorageReplicatedMergeTree::tryExecutePartMutation(DB::ReplicatedMergeTreeLogEntry const&)+0x4ab) [0x512d32b]
8. clickhouse-server(DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry&)+0x89) [0x512e1d9]
9. clickhouse-server() [0x512eb50]
10. clickhouse-server(DB::ReplicatedMergeTreeQueue::processEntry(std::function<std::shared_ptr<zkutil::ZooKeeper> ()>, std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::function<bool (std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>)+0x41) [0x521faa1]
11. clickhouse-server(DB::StorageReplicatedMergeTree::queueTask()+0x19a) [0x510572a]
12. clickhouse-server(DB::BackgroundProcessingPool::threadFunction()+0x396) [0x5162456]
13. clickhouse-server() [0x5d9675f]
14. /lib64/libpthread.so.0(+0x7e25) [0x7f55003dbe25]
15. /lib64/libc.so.6(clone+0x6d) [0x7f54ffbff34d] По этой таблице есть активные мутации которые не не могут исполнится. в моей сборке KILL mutation не работает
KILL MUTATION WHERE database = 'default' AND table = 'table'
;
Expected QUERY -
Привет, у нового mergetree по дефолту партиционирование отключено?
-
Мм, господа, а почему у меня может на маке падать коннект через последний ODBC драйвер с 19.3.5 кликом вот так:
➜ ~ cat /tmp/clickhouse-odbc.log
../driver/handles.cpp:59 SQLAllocHandle handle_type=1 input_handle=0x0
../driver/environment.cpp:72
2019.03.04 18:49:01
../driver/environment.cpp:104 === Driver started === VERSION=1.0.0.20190201 UNICODE=1 ODBC_WCHAR=1 sizeof(SQLTCHAR)=4 sizeof(wchar_t)=4 ODBCVER=351 ODBC_LIBRARIES=/usr/local/lib/libodbc.a;/usr/local/lib/libiodbcinst.a;/usr/local/lib/libltdl.a;/usr/local/lib/libiodbcinst.a;/usr/local/lib/libltdl.a ODBC_INCLUDE_DIRECTORIES=/usr/local/include
../driver/attr.cpp:15 impl_SQLSetEnvAttr
../driver/attr.cpp:19 SetEnvAttr: 200
../driver/attr.cpp:39 Set ODBC version to 2
../driver/attr.cpp:61 impl_SQLGetEnvAttr
../driver/attr.cpp:65 GetEnvAttr: 200
../driver/handles.cpp:79 SQLAllocConnect input_handle=0x7fc742d00580
../driver/handles.cpp:22 allocConnect environment=0x7fc742d00580 out_connection=0x7fc74382e5c0
../driver/escaping/../utils.h:29 Exception: wstring_convert: to_bytes error
../driver/odbc.cpp:1362 SQLErrorW
../driver/handles.cpp:112 SQLFreeConnect
../driver/handles.cpp:107 SQLFreeEnv
../driver/environment.cpp:109 ========== ======== Driver stopped =====================
это что то известное? -
Release 2018-10-17 я помню работал без проблем
-
Error connecting when using odbcw driver version · Issue #156 · yandex/clickhouse-odbc
Clickhouse version 18.16.1 ODBC driver version: 1.0.0.20190201 (built with unixodbc) OS: mac OS 10.14 (but also can be reproduced on Linux) I've built driver from source, and when I use lib...
-
Добрый день. Нет ли новостей по поводу этой оптимизации? В PR https://github.com/yandex/ClickHouse/pull/3292 комментарий, что «I was hoping this is a building block for #1344 :)», но не понятно, можно ли ускорить выборку последних записей через LIMIT и ORDER BY DESC, кроме как использовать итерацию по временным окнам?Efficiently finish sorting by (x, y) stream, that already sorted by (x) [CLICKHOUSE-4022] by CurtizJ · Pull Request #3292 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en
-
Я прошу прощения что вклиниваюсь, но раз пошло оживление может кто то подскажет? это нормально что на версии 19.3.5 как минимум select table_name.column from table_name на mergetree работает а на distributed дает exception: unknown identifier ?
-
tableau генерит именно такой квери (
-
На самом деле вопрос нужно адресовать не мне. А Алексею, например. Могу только высказать свое личное мнение: хотя это важная оптимизация, но она довольно "инвазивная", и существуют всякие workaround. Насколько мне известно, сейчас в работе всякие другие фичеры и плюс много работы в связи со стабилизацией последних версий. Поэтому скорее всего в ближайшие недели ждать этого не стоит. А потом - "поживем-увидим". На недостаток тасков программисты КХ не жалуются :)
-
Звучит не очень "нормально". А на предыдущих версиях работало?
-
я сразу с этой начал, сейчас начну даунгрейд/проверку
-
вот такой ексепшн:
localhost 🙂 select count(connection_rate_distributed.is_cracked) from connection_rate_distributed;
SELECT count(connection_rate_distributed.is_cracked)
FROM connection_rate_distributed
Received exception from server (version 19.3.5):
Code: 47. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Received from af-data-clickhouse-04.afdata.internal:9000, 172.31.36.5. DB::Exception: Unknown identifier: connection_rate_distributed.is_cracked, context: query: 'SELECT count(connection_rate_distributed.is_cracked) FROM connections.connection_rate ' required_names: 'connection_rate_distributed.is_cracked' source_tables: 'connections.connection_rate' table_aliases: private_aliases: column_aliases: public_columns: masked_columns: array_join_columns: source_columns: .
0 rows in set. Elapsed: 0.046 sec. -
почему source_tables: 'connections.connection_rate'
-
в 19.1.10 еще работает
-
Нужен не libodbc.a а libiodbc.a. даже если это симлинк
-
хм, я делал по мануалу отсюда https://github.com/yandex/clickhouse-odbc/blob/master/MACOS.md
-
хотя какое то время назад я собирал на пробу из мастера, может я руками наделал какие то симлинки
-
я перепроверю
-
подтверждено что работает так?
-
если да я буду рыть почему у меня не работает
-
Там не очень корректное определение odbc - iodbc и надо его исправить
-
ок, я перепроверю и пересоберу
-
спасибо
-
Доброе утро. Подскажите как лучше автоматически накатить схему на клик? Сразу после установки
-
cat schema.sql | clickhouse-client -mn
-
Похоже он пытается передать имя колонки вместе с названием Distributed таблицы в нижележащую.
-
Ну попробуйте ещё на 18.16, "глубже" можно не спускаться.
-
На 19.1.10 взлетело, мне пока хватит, не хочется совсем глубоко уходить
-
Надо бы на это issue открыть я думаю?
-
Коллеги, привествую!
избитая тема - подскажите как дела с множественными джойнами?
можно ожидать в ближайшее время или делать по классике с кучей подзапросов? -
А чем так сильно подзапросы не нравятся?
-
у меня пользователь в интерфейсе клацает фильтра и генерируются запросы, и в случае с подзапросами логика уже весьма нетривиальная получается
-
Спасибо, про примерные планы тоже хотелось узнать.
-
См. https://clickhouse.yandex/docs/en/roadmap/ и список открытых пулл-реквестов
-
имхо 99% готово (тещу в мастере, нашел мелкий бвг).
-
Надо. И описать как повторить ("в лоб" - не воспроизводится, возможно какие-то настройки).
-
открою
-
Добрый день
Поймал ошибку too many parts
Есть ли возможность указать настройки max_insert_block_size и stream_flush_interval_ms отдельно для выбранной таблицы
Данные читаю из Кафки -
да еще совсем забыл спросить, а как там с lowcardinality в последнем релизе дравера? потому что у меня эти колонки просто не выгребает
-
-
но не зарелижено еще https://github.com/yandex/clickhouse-odbc/commit/b8cb5f5d01bf7a0125793c5599e5e4f4cc2f45bfLowCardinality temporary fix #157 (#158) · yandex/clickhouse-odbc@b8cb5f5
ODBC driver for ClickHouse. Contribute to yandex/clickhouse-odbc development by creating an account on GitHub.
-
и нормальный фикс будет в самом ClickHouse - https://github.com/yandex/ClickHouse/pull/4381clickhouse-odbc #157 : Remove LowCardinality from type by proller · Pull Request #4381 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en For changelog. Remove if this is non-significant change. Category (leave one): Bug Fix Short description ...
-
Всем привет. гошный драйвер от mail.ru умеет вместе с chproxy работать?
У нас такое возникло: http://foo:bar@proxies_chproxy:8123/mydb: can't ping clickhouse
При этом
$ curl -X POST -d 'SELECT 1' http://foo:bar@proxies_chproxy:8123/mydb
"10.0.151.86:49142": unsupported path: "/mydb"
$ curl -X POST -d 'SELECT 1' http://foo:bar@proxies_chproxy:8123
1
$ curl -X POST -d '' http://foo:bar@proxies_chproxy:8123
Code: 62, e.displayText() = DB::Exception: Empty query -
-
Joined.
-
-
-
чему равен точный размер Path.mrk и других .mrk файлов?
-
-
-
-
-
-
-
-
не помогло
-
-
optimize table ... final
-
както так:
Storage ReplicatedMergeTree doesn't support FINAL. -
-
-
Найти которая реплика является лидером и запустить запрос на ней.
-
(увы никак этот баг не хочет фикситься, хотя вроде уже 2 попытки были)
-
лидер в конфиге прописывается? из select * from system.cluster можно сделать вывод о лидерстве?
-
ага, оттуда. Он не в конфиге, выбирается динамически.
-
а если таблица лежит на 3 нодах и у каждой ноды есть 1 реплика, то получается надо 3 раза найти лидера и 3 раза сделать optimize?
-
select database, table, replica_name from system.replicas where is_leader;
-
попробуйте ещё понять, повторяется ли проблема на предыдущих версиях сервера (судя по всему, у вас 19.3, попробуйте 19.1 и 18.16)
-
Да. Ну и есть ещё шанс что с ON CLUSTER сработает (но я не уверен).
-
Да, сейчас 19.3.5 revision 54415.
попробую откатиться -
-
не помогло, пробовал 19.1, 18.16, трейс с 18.16: https://pastebin.com/i3VC3h9t
-
Товарищи, подскажите пожалуйста!
Хотелось бы понять насколько применим ClickHouse для такой задачи..
Сервис видеонаблюдения получает данные от камер в виде голых h264 nal (грубо говоря это кадры).
Для быстрого запроса из базы данных, удобства бекапа и прочих преимуществ хранения в базе перед хранением на диске в виде файлов хотелось бы попробовать использовать ClickHouse.
Общий поток с камер на сервер около 70-80 Мбайт/с.
Количество вставок в секунду около 8-10 тысяч.
Объем данных на вставку колеблется от нескольких байт до нескольких десятков килобайт.
Общий объем данных в базе около 70Тб.
Количество индексов в таблице - id камеры, таймстамп, тип нала.
Запросов на чтение в разы меньше.
Изменений данных нет вообще, только если удаление или пересоздание таблицы полностью.
Задача на чтение в основном выбрать кадры для определенного интервала времени по таймстампу. -
скажите пжл - команда OPTIMIZE TABLE table FINAL DEDUPLICATE; - подхиодит для дедупликации по первичному ключу? Она не задокументирована, а просто кто-то написал на гитхабе
-
Команда
OPTIMIZE TABLE table FINAL
подходит. Чем вам не подходит? -
1й раз когда запустил - выполнилась, сожрав +3гб от 18гб таблы. Второй запуск - падает с ошибкой DB::Exception: Unknown log entry type: 0
-
Попробуйте по партициям оптимизнуть
OPTIMIZE TABLE table PARTITION ... FINAL -
не применим вообще. КХ будет 70ТБ перекладывать с место на место постоянно.
-
ок, спс
-
Чё это? Ну, помержит несколько раз
-
-
спасибо буду пробовать
-
-
ну да, непстоянно, раз 7 переложит.
-
-
-
Не очень понятно почему..
70Тб это в месяц со всех камер..они и на обычных файлах перезаписываться раз в месяц точно будут -
-
Я бы на вашем месте посмотрел в сторону hadoop (hdfs)
-
Это невероятно медленно
-
медленно для чего ?
-
-
-
-
-
посмотрите на hadoop, в clickhouse вам не много профита будет
-
да, спасибо, уже читаю)
-
-
т.е. вы рекомендуете хадуп что бы в 2ТБ файле делать навигацию на кусок 2МБ в середине ???? Мир сошел с ума по-моему.
-
-
мне кажется скорее кассандра тут пойдет
-
а я понял, то был сарказм. Моя рекомендация - BoltDB
-
А можно пошутить про MySql ?
-
погодите, а откуда взялись 2ТБ файлы ?
-
-
Всем привет! Подскажите, пож-ста, насколько адекватно в Clickhouse создавать внешний hashed Dictionary на 3 млн строк и более? Справочник будет содержать только id и одну строковую переменную. Вариант - добавить расшифровку id в основную таблицу новым столбцом рассматривал, но хочу понять жизнеспособность альтернативы. С Click-ом пока знаком только по документации :(
-
Да, все врено!
кадр по 0-60кб, в секунду около 8-10 тысяч их всего
хранить файлы по 2Тб не надо) -
все отлично будет. (ну памяти съест >500МБ и <1GB)
-
в контексте обсуждения видео, ради интереса посмотрел на чем работает Youtube
оказалось вот https://github.com/vitessio/vitessGitHub - vitessio/vitess: Vitess is a database clustering system for horizontal scaling of MySQL.Vitess is a database clustering system for horizontal scaling of MySQL. - GitHub - vitessio/vitess: Vitess is a database clustering system for horizontal scaling of MySQL.
-
берите https://github.com/boltdb/bolt
The goal of the project is to provide a simple, fast, and reliable database -
Понял. Спасибо!
-
Not bad
-
-
не берите витесс, он оч плохо работает) та версия которую использует youtube и та, которая в паблике, очень отличаются друг от друга :) мы пытались его внедрить на протяжении полугода и так и не смогли. Но это было года полтора назад, сейчас может что и изменилось
-
Спасибо, почитаю.. Немного работал с ним когда-то
Смущает что репозиторий в архиве) -
я пошутил, вам надо тупо на ф.с. хранить файлы. Вам не нужна база данных (точнее сама ф.с. и будет в каком-то смысле бд.)
-
На самом деле хранение больших и уже хорошо сжатых объектов - не самая сильная сторона кликхаус. Но если выбирать вам нужно всегда относительно большими диапазонами (скажем по несколько минут) то может и сработать, если некоторые настройки подкрутить. Хотя если честно не очень понимаю чем плохи простые и понятные видеофайлы аккуратно разложенные по папкам.
-
сейчас так и делаю, но надоело по файлам ползать нужные куски искать читать/писать аккуратно) хочется удобного интерфейса..
нагрузка не такая страшная вроде бы.. в статьях хвастаются куда большими цифрами)
на один сервер больше указанной не будет т.к. видеоаналитика на нем же и больше не вытянет) -
ну так сами метаданные о файлах храните в любой бд, хоть в sqlite
-
Надобность в КХ у вас очень сомнительная.
Да, мускуль такой объём тяжело будет ворочать, но лить файлы в КХ - нафиг надо.
Лейте файлы в ФС, в КХ сохраняйте путь.
Вам именно морда нормальная нужна и КХ там только для ускорения поиска нужных кадров.
Имхо -
Понятно, спасибо! Выбирать как раз диапазонами поменьше..
иногда нужно выгрузить час-два допустим, но это редко..
куда чаще пользователь просто ткнул на перемотку и вот минуту надо выдрать и ему быстро отдать -
так и делаю, в тарантуле храню и бакенд в нем же на lua..
но думал КХ поможет все сделать проще и удобнее) -
Кстати - обычно видеокодеки только ключевые кадры пишут целиком, а потом только всякие дельты. Если вы будете каждый кадр отдельно сохранять - то сильно проиграете в сжатии
-
тут как раз речь о том чтобы не создавать файлы по несколько минут, а тупо кадры хранить и налету из них собирать все что нужно, mp4, mpeg-dash и тд
-
да, я храню h264 NAL в нем может быть I слайс (ключевой кадр - жирный до 50кб) либо P-B слайсы, который как раз меньше.. но для базы это все просто один кадр грубо говоря.. полный или нет уже не важно
-
так написанное мной не противоречит.
От хранения файлов целиком в КХ вы ничего не выиграете по сравнению с тем, что если будете хранить файлы в структуре типа
/Год/Месяц/День/Час/Минута/* -
удаление большого количества файлов очень долгое... возможно какую-то фс надо выбрать для такого, или затюнить что-то
я сейчас делаю пачки по 10минут, и уже по ним там ползаю когда запрашивают. чтобы минимизировать количество файлов -
10 минут - это у вас 600 000 файлов.
Если вы их храните в одной директории, то конечно долгое удаление будет -
Можно попробовать - вдруг заработает :) Я думаю что если использовать партиционирование например по часам (например по 4/6 часов) сортировать данные по id камеры и номеру кадра, снизить index_granularity и выключить сжатие для колонки с видеокадрами - то может даже и будет работать не сильно хуже чем честные файлики, но с SQL интерфейсом :)
-
Да, буду тестить! Спасибо за советы
База все же дает много удобств.. -
у вас место в ФС ограничено?
-
да, место с некоторым запасом могу выделить, но бесконечно писать не могу
-
-
Если камер немного - то можно попробовать по id камеры партиционировать.
Дайте знать потом - получилось ли что-то из этого. Ваш сценарий использования очень далек от нормального для КХ, поэтому любопытно :) -
Я просто всё равно никак не пойму.
Если хранить путь к кадрам, как я предлагаю, вы так же будете мутации запускать, чтобы выкинуть устаревшее, а потом когда-нибудь удалите свои файлики.
Будет вам и удобство и КХ не будет напрягаться с футблом партов и прочих своих внутренних штук. -
а потом в удобное время будете дропать файлы
-
-
к тому же, вы хотите в КХ писать нон-стоп, как я понимаю, он этого не любит
-
Почему я думаю что может получиться - для видео стандартный и наиболее подходящий формат хранения - это видеофайлы, которые представляют собой последовательно записанные друг за другом кадры. Данные в КХ это тоже - просто записанные друг за другом значения. Поэтому такой файл с данными КХ по сути практически ничем не будет отличаться от видеофайлы, с теми же плюсами (удобное последовательное чтение) и минусами (нужно пропускать ненужные блоки). Весь вопрос только в том - как будет справляться с вставками и не будет ли много лишней работы делать при фоновых слияниях.
-
ну хранить путь к кадрам уже как бы и не нужно тогда..
сейчас я точно знаю где искать конкретный момент времени, по таймстампу и id клиента/камеры знаю в какой файл смотреть и в нем уже мелкий индекс + перебор до нужного кадра.. причем могу сделать это даже в mp4 контейнере.. этот файл в плеере даже играется, но при этом в нем есть atom с кастомными пользовательскими данными в которых мелкий индекс лежит уже внутри файла
просто если бы КХ или что-то еще было хорошим решением, то сразу бы отпали задачи администрирования типа как бекап данных, репликация на другой сервер, перенос данных и тд.. и из любых приложений удобно было бы доступ получать... сейчас не все так просто)
допиливать свою систему на файлах под эти задачи тоже вроде бы можно, но очень не хочется.. ведь в базах это уже давно есть, отлажено -
Учтите что вставлять в КХ нужно относительно большими блоками - идеально примерно по 100-200К строк, и что данные в КХ будут несколько раз перекладываться с места на место создавая доп. нагрузку на диск. (Грубо говоря будете вставлять по минуте данных - а он потом из минутых файлов делать бОльшие - на несколько десятков минут - потом на часы и т.п.)
-
если вы будете в БД, не обязательно кх, хранить путь к файлам, то вполне можно организовать более эффективное хранение, которое будет более оптимизированное для выборок и удалений, нежели просто раскладка по дате.
Большая вложенность каталогов это тоже зло.
А так, взяли хеш по дате + камере, разложили практически красивым деревом, всё сбалансировано, всё работает.
Ручками только фиг удалишь уже.
Но вообще, как не вспомнить одну прекрасную статью, где написано, что КХ не панацея, не решение ваших проблем, и вообще писался не для вас(с) -
короче: хотел сделать TRUNCATE этой таблицы. ( В моем случае это ок думал после транкейта все партиции удалятся). После этойго в process list. стали появляться запросы типа SELECT DISTINCT arrayJoin(extractAll(name, '[\\w_]{2,}')) AS res FROM (SELECT name FROM system.functions UNION ALL SELECT name FROM system.table_engines UNION ALL SELECT name FROM system.formats UNION ALL SELECT name FROM system.table_functions UNION ALL SELECT name FROM system.data_type_families UNION ALL SELECT name FROM system.settings UNION ALL SELECT concat(func.name, comb.name) FROM system.functions AS func CROSS JOIN system.aggregate_function_combinators AS comb WHERE is_aggregate UNION ALL SELECT name FROM system.databases LIMIT 10000 UNION ALL SELECT DISTINCT name FROM system.tables LIMIT 10000 UNION ALL SELECT DISTINCT name FROM system.columns LIMIT 10000) WHERE notEmpty(res), KILL query не помогал. Судя по всему после таймаута CH запускал такой же запрос опять. Принял решение рестартить ноду. Рестарт тоже не прошлел гладко. Сервер не мог корректно завершить работу, висело на собщении “Stopped being leader” как раз бля этой таблицы. Сделал KILL -9 Received termination signal (Terminated) и далее при старте CH визимо заигнорил битые партиции. Именно для этой таблицы я готов мириться с потерей даннхых, но вообще беда =( Эта таблица у меня реплицируемая, но в шарде всего одна репоика. Сделал это на будещее (Может в этом причина?)
-
ничего непонятно, кто на ком стоял.
>короче: хотел сделать TRUNCATE этой таблицы.
TRUNCATE-м чинили проблему и проблема возникла из-за TRUNCATE -
Прочитайте сообщение на которое я ответил, у меня не проходили мутации по таблице
-
Транкейтом я пытался избавиться от первоначальной проблемы
-
Joined.
-
А в чем вопрос? Лечение той проблемы truncate напоминает лечение головной боли топором :) Приведенные запросы делает clickhouse-client при запуске для инициализации автодополнений
-
Д я это понимаю. Эта таблица содердит временные данные которые я готов был потерять. А как лечить первоночальную проблему? Когда мутации не проходят из-за тоно что CH не может найти чать данных в партиции? DB::Exception: /database/clickhouse/data/DB_NAME/TABLE_NAME/tmp_clone_20181112_20181130_0_16_1_25/duration_ms.bin doesn't exist, e.what() = DB::Exception, Stack trace:
-
detach?
-
Я не спрашиваю почему это произошло(хотя тоже интересно), я спрашиваю как лечить
-
jfyi: fixed https://github.com/yandex/ClickHouse/issues/4581
-
т.е. изначально все работало, никаких потерь данных не было, а нужно было отменить мутацию?
и этот файл был в порядке в исходной таблице 20181112_20181130_0_16_1_25/duration_ms.bin ? -
Я его не мог найти, но вроде-бы был файл с этой директории с .tmp суффиксом. Нужно было скопировать директорию что-ли =)
-
В след раз буду умнее
-
> т.е. изначально все работало, никаких потерь данных не было, а нужно было отменить мутацию
-
да, делаю DELETE каждый день, это часть ETL. Удаляю данные по location ( Эта таблица очнь маленькая)
-
какая версия КХ ?
отменить мутацию для нереплицированной t.me/clickhouse_ru/62084
для реплицированной в зукипере удалить -
ClickHouse client version 18.16.1, спасибо
-
Доброго времени суток!
Подскажите как посмотреть сколько съел тот или иной запрос.
Например у меня в логе фигурирует
2019.03.05 16:40:48.270950 [ 1497167 ] {c2a973a7-3310-4a1b-95f4-2acae830a10c} <Debug> MemoryTracker: Peak memory usage (total): 31.15 MiB.
2019.03.05 16:40:48.270983 [ 1497167 ] {c2a973a7-3310-4a1b-95f4-2acae830a10c} <Debug> MemoryTracker: Peak memory usage (for query): 14.75 MiB.
как я понимаю в 4 столбце это id запроса. А вот чем отличается total от for query? -
Спасибо
-
-
Если я все правильно понял то это происходит здесь https://github.com/yandex/ClickHouse/blob/d45b90b530f53444d601d60080d4c76e0db0feac/dbms/src/Interpreters/ProcessList.cpp#L156 Судя из имени класса - total это суммарное максимально потребление памяти всеми запросами а for query для текущего запроса. А 4 параметр возможно идентификтор соединенияyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
мм господа, а что будет если я сначала вставлю в distributed с каким либо ключом шардирования, а затем буду вставлять в локальные таблицы в каждом шарде в прозвольном порядке, при запросах в dsitributed эти данные будут доступны?
-
будут доступны, по умолчанию disitributed читает все шарды (см. новый параметр 19.1.6 optimize_skip_unused_shards)
-
тобишь шард выбирается при инсерте а при селекте читается со всех так?
-
спасибо
-
типа того. https://clickhouse.yandex/docs/ru/operations/table_engines/distributed/
инсерт зависит от ключа шардирования, и кол-ва шардов.
и select может читать не со всех optimize_skip_unused_shards / skip_unavailable_shards -
да пасусь там спасибо, меня интересует как раз default behaviour, если по дефолту читает со всех то отлично
- 06 March 2019 (190 messages)
-
Joined.
-
не, никак
lib ll /usr/local/lib/*odbc*
lrwxr-xr-x 1 i.morokin admin 68B Mar 5 18:15 /usr/local/lib/libclickhouseodbc.dylib -> ../Cellar/clickhouse-odbc/1.0.0.20190201/lib/libclickhouseodbc.dylib
lrwxr-xr-x 1 i.morokin admin 65B Mar 5 18:15 /usr/local/lib/libclickhouseodbc.so -> ../Cellar/clickhouse-odbc/1.0.0.20190201/lib/libclickhouseodbc.so
lrwxr-xr-x 1 i.morokin admin 69B Mar 5 18:15 /usr/local/lib/libclickhouseodbcw.dylib -> ../Cellar/clickhouse-odbc/1.0.0.20190201/lib/libclickhouseodbcw.dylib
lrwxr-xr-x 1 i.morokin admin 66B Mar 5 18:15 /usr/local/lib/libclickhouseodbcw.so -> ../Cellar/clickhouse-odbc/1.0.0.20190201/lib/libclickhouseodbcw.so
lrwxr-xr-x 1 i.morokin admin 47B Mar 5 18:10 /usr/local/lib/libiodbc.2.dylib -> ../Cellar/libiodbc/3.52.12/lib/libiodbc.2.dylib
lrwxr-xr-x 1 i.morokin admin 41B Mar 5 18:10 /usr/local/lib/libiodbc.a -> ../Cellar/libiodbc/3.52.12/lib/libiodbc.a
lrwxr-xr-x 1 i.morokin admin 45B Mar 5 18:10 /usr/local/lib/libiodbc.dylib -> ../Cellar/libiodbc/3.52.12/lib/libiodbc.dylib
lrwxr-xr-x 1 i.morokin admin 51B Mar 5 18:10 /usr/local/lib/libiodbcinst.2.dylib -> ../Cellar/libiodbc/3.52.12/lib/libiodbcinst.2.dylib
lrwxr-xr-x 1 i.morokin admin 45B Mar 5 18:10 /usr/local/lib/libiodbcinst.a -> ../Cellar/libiodbc/3.52.12/lib/libiodbcinst.a
lrwxr-xr-x 1 i.morokin admin 49B Mar 5 18:10 /usr/local/lib/libiodbcinst.dylib -> ../Cellar/libiodbc/3.52.12/lib/libiodbcinst.dylib
-rwxr-xr-x 1 11862 admin 2.6M Nov 28 20:36 /usr/local/lib/psqlodbcw.so
** Trace finished on Tue Mar 05 18:23:58 2019
../driver/handles.cpp:59 SQLAllocHandle handle_type=1 input_handle=0x0
../driver/environment.cpp:72
2019.03.05 18:25:09
../driver/environment.cpp:104 === Driver started === VERSION=1.0.0.20190201 UNICODE=1 ODBC_WCHAR=1 sizeof(SQLTCHAR)=4 sizeof(wchar_t)=4 ODBCVER=351 ODBC_LIBRARIES=/usr/local/lib/libiodbc.a;/usr/local/lib/libiodbcinst.a;/usr/local/lib/libltdl.a;/usr/local/lib/libiodbcinst.a;/usr/local/lib/libltdl.a ODBC_INCLUDE_DIRECTORIES=/usr/local/include
../driver/attr.cpp:15 impl_SQLSetEnvAttr
../driver/attr.cpp:19 SetEnvAttr: 200
../driver/attr.cpp:39 Set ODBC version to 3
../driver/handles.cpp:59 SQLAllocHandle handle_type=2 input_handle=0x7f882958f8f0
../driver/handles.cpp:22 allocConnect environment=0x7f882958f8f0 out_connection=0x7f8829583978
../driver/attr.cpp:444 SQLSetConnectOptionW
../driver/attr.cpp:93 impl_SQLSetConnectAttr
../driver/attr.cpp:97 SetConnectAttr: 103 = 0x1e (8)
../driver/odbc.cpp:65 SQLDriverConnectW connection_str_in=0x7f882958db20 : -3 connection_str_out=0x7f882a0ac200 : 2048
../driver/connection.cpp:141 Parse DSN: key=server value=35.164.55.174
../driver/connection.cpp:141 Parse DSN: key=port value=9090
../driver/connection.cpp:141 Parse DSN: key=database value=connections
../driver/connection.cpp:141 Parse DSN: key=uid value=default
../driver/connection.cpp:141 Parse DSN: key=driver value={ClickHouse}
44793733536 [0x70000a104000] ../driver/escaping/../utils.h:29 Exception: wstring_convert: to_bytes error
44793733703 [0x70000a104000] ../driver/odbc.cpp:559 impl_SQLGetDiagRec handle_type: 2, record_number: 1, out_message_max_size: 2048
44793733738 [0x70000a104000] ../driver/odbc.cpp:559 impl_SQLGetDiagRec handle_type: 2, record_number: 2, out_message_max_size: 2048
44793734157 [0x70000a104000] ../driver/handles.cpp:90 SQLFreeHandle handleType=2 handle=0x7f882958dc70
44793734175 [0x70000a104000] ../driver/handles.cpp:90 SQLFreeHandle handleType=1 handle=0x7f882958f8f0
44793734182 [0x70000a104000] ../driver/environment.cpp:109 ========== ======== Driver stopped ===================== -
последний odbc под мак не взлетает
-
всем привет!
что-то никак не пойму, почему не могу создать MV типа AggregatingMergeTree никаким образом
CREATE MATERIALIZED VIEW tst_metrics.`seconds.mva`
ENGINE = AggregatingMergeTree() PARTITION BY toDate(received_at) ORDER BY (timestamp, resp, company_id,message_center_id) SETTINGS index_granularity = 8192
AS SELECT
multiply(intDiv(toUInt32(received_at), 15), 15000) as timestamp,
resp,
company_id,
message_center_id,
sumState(weight) as weight_sum
from stage1.adata
group by timestamp, resp, company_id,message_center_id
вылезает ошибка
Code: 47, e.displayText() = DB::Exception: Unknown identifier: received_at, context: required_names: 'received_at' source_tables: table_aliases: private_aliases: column_aliases: public_columns: masked_columns: array_join_columns: source_columns: , e.what() = DB::Exception
CREATE MATERIALIZED VIEW tst_metrics.`seconds.mva`
ENGINE = AggregatingMergeTree(toDate(received_at), (timestamp, resp, company_id, message_center_id), 8192)
AS SELECT
multiply(intDiv(toUInt32(received_at), 15), 15000) timestamp,
resp,
company_id,
message_center_id,
sumState(weight) weight_sum
from stage1.adata
group by timestamp, resp, company_id, message_center_id
а тут вылезает ошибка:
Code: 36, e.displayText() = DB::Exception: Date column name must be an unquoted string
MergeTree is a family of storage engines.
в чем подвох? КХ 19.1.6 -
У вас отдельно SELECT выполняется?
-
-
блин, я тугодум, да :)
конечно отдельно SELECT выполняется -
Странно, заводите issue
-
-
действительно прокатило, а как избежать этой колонки, мне надо аггрегировать по 15 секунд, а там каждую секунду приходит по 3к
-
-
-
-
круто! работает! 👍
-
Привет всем. Кто то работал в связке кликхаус и спарк? Интересует, как лучше сделать чтение/запись. Кликхаус выступает как data source для спарка
-
Я работаю. Кафка стриминг, кмк, лучший вариант в данном случае
-
Запись
Пишем из каждой partition через RowBinary callback. Знаем, сколько строк во всем DataFrame, который собираемся вставлять. После вставки посылаем запросы с select count() where ..., ожидая пока число строк совпадёт с тем, которое вставляли.
Чтение
В ThreadPool отправляем запросы на SELECT .... WHERE sharding_condition. Потом над результатами делаем UNION, получая итоговый DataFrame -
-
-
Через Null-таблицу, но это на свой страх и риск
-
спасибо!
-
-
Каскадные МВ как-то обсуждали, насколько помню решили делать
-
👍
-
Коллеги, а можно ли каким-то образом сохранить в clickhouse строку с символами "? Пробовал экранировать её, но всё равно не срабатывает
-
-
Друзья, подскажите, а как сжатие массивов происходит?
Т.е. как они на диске лежат, каждый элемент в отдельном файле или все строки в одном файле? -
вся колонка в одном файле
-
хоть массив хоть не массив в ней
-
понял.
Т.е. если массивы фиксированной длины, то лучше по отдельным полям раскидать -
-
спасибо
-
-
-
-
Создать новый кластер в конфиге, без рестарта, создать реплицированные таблицы, INSERT в_новую SELECT из_старой, создать новую Distributed-таблицу указывающую на новый кластер, старый кластер потом просто удалить из конфига
-
-
у вас была одна реплика, значит таблица была нереплицированная, как у вас вторая нода скачает с первой?
-
-
-
-
Ребят, привет!
А в докере табикса есть возможность добавить свой sql запрос по умолчанию?
Заранее спасибо за ответ! -
Там можно сохранять запросы в отдельной вкладке
-
-
Ребята, есть какие то особые паттерны для хранения в кликхаусе 1 ко многим?
Для примера есть пост, к нему от 0 до 1М комментариев, постов в свою очередь тоже много. Лить все комменты в одну табличку? -
-
-
-
-
Чем обычная нормализация не подходит? Да, придёться делать join, но в КХ есть способы оптимизовать: движко Join, словари
-
Такое по скорости будет?
-
-
Комменты сажаем с отдельный тейбл и сортируем по ключу последовательности? В кортеж первичного можно будет посадить второй очередью timestamp?
-
Посоветуйте целесообразность использования КХ в следующем проекте: Приложением (.NETCore или . NET Framework) будут опрашиваться ежесекундно (1-3 сек.) приборы ADAM и количество параметров будет около 100-150 шт. В клиентском приложении необходимо показывать как текущие мгновенные значения (sic!) так и различные средние за час, день, месяц и др. Может вместо КХ что-то другое посоветуете? Спасибо!
-
Ответ зависит от того:
- чем не устраивает текущее решение и пробовали ли использоват mysql/postgre
- сколько данных -
Проект пока в стадии концепции. Хотелось бы получить экспириенс с использованием Column-oriented субд...
-
И да. У меня получается вставка данных OLTP, что для КХ не есть хорошо?
-
Попробуйте решить в лоб, с КХ или нет - не так важно. У вас сейчас нет четких требований по данным, потому сложно что-то советовать
-
Что такое "вставка данных OLTP"?
-
Смотря какие запросы нужны. Если цель — забирать комменты по post_id, то достаточно иметь табличку Comment(post_id, timestamp, ....) с order key = (post_id, timestamp)
-
Хотел сказать - частая вставка данных небольшими порциями.
-
Да, запросы это только забирать коменты, их количество и средние по всем постам юзера. Без извращений)
-
А что за "средние по всем постам юзера"?
-
Среднее количество комментов к посту. За все время и аггрегированно по месяцам.
-
select count(), toYYYYMM(ts) as month WHERE post_id = ? GROUP BY month with totals
-
Да,спасибо. В моей неискушенной голове это примерно так и выглядело. Знакомые хвалили КХ, но сказали что надо майндсет менять чтобы с ним эффективно работать. У меня только с постгресом опыт)
-
В общем случае вставлять "большими" вставками не проблема. Просто у КХ есть специфика и без особой надобности нет смысла внедрять. А так - велкам
-
Да, пугает то, что в КХ нельзя часто вставлять данные мелкими порциями, например по 50-100 строк, как пройдет 1 цикл опроса приборов.
-
На самом деле можно. Каждая вставка создает парт на диск, что добавляет работу фоновому мерду и усложняет запрос на чтение свежих данных. Если вам прям нужно так часто вставлять - придёться подкручивать настройки фоновых мерджей. Иначе в дальнейшем будет деградация из-за большого кол-ва партов
-
-
-
Длинные коннекты я бы не советовал, а вот взять готовый батчер или написать свой - да
-
А что не так с длинными коннектами?
-
А зачем они нужны если как минимум есть готовые батчеры?
-
Например связь моргнёт между вами и ДЦ. И в батчерах есть сброс по таймауту - его руками писать не нужно
-
Затем, чтобы не использовать батчеры. С батчерами проблема, что нет обратной связи.
У нас перед записью в КХ "транзакционный" накопитель, кторый умеет на диск скидывать, если кх недоступен. Локально убиваются только те данные, по которым 200 вернулся из КХ с кворумной ставкой -
-
А чем ваш транзакционный накопитель отличается от батчера?
-
-
-
Коллеги,не могу разобраться с ситуацией: есть распределенная таблица, которая смотрит на 3 шарда, данные на каждом шарде разные. Делаем SELECT из распределенной таблицы и каждый раз получаем разный результат(всего есть 2 записи, поочередно возвращается то одна,то две записи).
select * from table_2
where guidch = '0387d447-6fd4-4b9a-b226-a54a5b25e7f0'
В логах чисто, ошибок нет, версия clickhouse 19.1.6, конфиги тоже все перепроверил. Куда копать? -
покажите конфиг кластера
-
и определения таблиц
-
<yandex>
<remote_servers>
<logs>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>kk-clickhouse-db02</host>
<port>9000</port>
</replica>
<replica>
<host>kk-clickhouse-db03</host>
<port>9000</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>kk-clickhouse-db04</host>
<port>9000</port>
</replica>
<replica>
<host>kk-clickhouse-db05</host>
<port>9000</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>kk-clickhouse-db06</host>
<port>9000</port>
</replica>
<replica>
<host>kk-clickhouse-db07</host>
<port>9000</port>
</replica>
</shard>
</logs>
</remote_servers>
</yandex> -
реплики пересекаются? такое поведение может быть, если distributed-таблица выбирает из шардов 1,2,3 реплики, которые по факту содержат данные < 3 _разных_ шардов
-
как создана таблица?
-
Таблица в каждом узле кластера
CREATE TABLE gis.table_2 (
pguid String,
podguid String,
pebpp_id String,
pname String,
p_gun_guid String,
p_gun_pebpp_id String,
p_gun_name String,
regcode String,
regname String,
regtofk String,
regtofkcode String,
ptcode String,
has_indirect_members Int32,
aname String,
aabbreviation String,
guidch String,
guidpay String,
guidinc String,
guidsrv String,
bill_id String,
discount_value Float64,
reconcile_payments_status Int32,
reconcile_incomes_status Int32,
amount Float64,
amount_pat Float64,
amount_inc Float64,
register_date DateTime,
open_date DateTime,
close_date DateTime,
status Int32,
is_active Int32,
kbk String,
type Int32
) Engine = ReplicatedMergeTree('/ch/tables/{shard}/table_2', '{replica}')
PARTITION BY toDate(register_date)
ORDER BY guidch;
Распределенная таблица.
CREATE TABLE gis.table_2 (
pguid String,
podguid String,
pebpp_id String,
pname String,
p_gun_guid String,
p_gun_pebpp_id String,
p_gun_name String,
regcode String,
regname String,
regtofk String,
regtofkcode String,
ptcode String,
has_indirect_members Int32,
aname String,
aabbreviation String,
guidch String,
guidpay String,
guidinc String,
guidsrv String,
bill_id String,
discount_value Float64,
reconcile_payments_status Int32,
reconcile_incomes_status Int32,
amount Float64,
amount_pat Float64,
amount_inc Float64,
register_date DateTime,
open_date DateTime,
close_date DateTime,
status Int32,
is_active Int32,
kbk String,
type Int32
) Engine = Distributed(logs, gis, table_2, rand()) ; -
А как это проверить?
-
кстати, а как это CREATE TABLE gis.table_2 и там, и там? одна распределенная таблица на отдельном хосте?
-
Да, распределенная таблица на отдельной ноде
-
а макросы правильно проставлены?
-
-
-
where
value_with_zero != 0 -
или это так не работает хД ?
-
агрегат под WHERE?
-
топорно, но если деление идёт после агрегации то можно наверное вынести деление в следующий запрос и там проверить на 0
или в HAVING проверить -
ребят, а кто-то знает как при таком инсерте заменить одно поле с date на текущую дату? желательно чтобы не перечислять все остальные поля, так как там их овердофига
INSERT INTO log_database.reports SELECT * FROM default.reports; -
@ztlpn не подскажите?
-
для этого есть алтер апдейт
-
это как?
-
суть такая, мне нужно скопировать данные из одной базы в другую, но только у поля date заменить дату на сегодняшнюю
-
таблички идентичные
-
-
А как узнать, к кому старается подключиться КХ? В логах:
2019.03.06 14:34:51.698318 [ 45 ] {} <Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 104, e.displayText() = Connection reset by peer
2019.03.06 14:34:52.080308 [ 46 ] {} <Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 104, e.displayText() = Connection reset by peer
2019.03.06 14:35:17.058880 [ 47 ] {} <Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 104, e.displayText() = Connection reset by peer -
-
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr
там будет вот про такую конструкцию -
не ну через отдельный запрос не интересно, мне интересно почему он пытается расчитать выражение не подходящее под условие
-
Мне нужно до вставки заменить
-
ClickHouse не умеет short-circuit условных выражений. То есть для if сначала вычисляются левая и правая ветки для всех строк, а потом склеиваются в зависимости от значения условия. Так проще и в большинстве случаев быстрее.
-
т.е. единственный выход только через подзапрос?
-
-
> Изменение столбцов, которые используются при вычислении первичного ключа или ключа партиционирования, не поддерживается.
-
раскрывайте звёздочку
-
=)))
-
тогда если человеку лень могу предложить ему
сделать alter add и добавить колонку с дефолт датой нужной -
-
-
-
Таблиц много. Полей ещё больше, не Охота
-
-
-
поручите это какому-нибудь скрипту
-
-
вытащи из схемы таблицы все поля и регулярками в питоне или тырнетах или в саблайме подгони в инсерт, должно быть не трудно =)
ну и потом ручками одно поле заменить на нужную дату -
SELECT
if(toUInt8(2),1/1,1/0) as text
подобный запрос выполняется, но для 0 он возвращает inf возможно нужно просто этот момент обработать ? -
-
-
-
Нашли проблему, данные на нодах разные, отсюда и разные результаты.
-
-
-
-
Не настроены clickhouse_remote_servers, нет xml файла. Если нет репликации можно закоментировать
-
-
спасибо разобрался))
-
доброго времени дня,
загружаем в distributed ReplicatedMergeTree таблицу несколько сот файлов через cat file_XXX.tsv | clickhouse-client --query="INSERT INTO tmp.table FORMAT TSV" параллельно в несколько десятков потоков и получаем дубликаты, добавили в таблицу поле с именем файла и партиционировали по нему, видно что первые несколько десятков файлов загружаются нормально, а потом начинают появляться дубликаты, и концу - в почти во всех партициях есть дубли
никто с таким не сталкивался - как с этим бороться -
добрый вечер. А подскажите пжл какой нибудь эффекивный способ удалить дубли, может готовыми командами КХ? очевидный вариант создать новую таблу без дублей, затем перелить, удалив - не оч красивое решение.
-
OPTIMIZE TABLE FINAL DEDUPLICATE; - не дает нужного результата
-
что вы делаете при ошибке в 'cat file_XXX.tsv | clickhouse-client --query=' ? повторяете? в КХ нет транзакций и атомарности.
distributed ReplicatedMergeTree -- у вас один шард и одна реплика?
партиционировали по нему -- что это значит? partition by filename ? -
alter delete ?
>OPTIMIZE TABLE FINAL DEDUPLICATE; - не дает нужного результата
один шард? размер парта? таблица replacing ? -
Оптимизация даст результат только конкретной таблицы и конкретной ноды. Если tbl - таблица на ноде, а tbls - дистрибуция, то оптимизировать нужно на каждой ноде конкретную таблицу, т.е. tbl.
-
нет - не повторяем, кластер - 4 машины, 2 шарды, 2 реплики, да partition by filename - чтобы можно было детачить и удалять в случае неуспеха
-
так и делаю. То есть для каждой локальной таблы, но ничего не меняется.
-
И ошибок нет, а у вас лог в режиме трейса?
-
так дубликаты у вас есть внутри 1-го шарда?
-
вообще ничего. Очень странная команда
-
OPTIMIZE TABLE t_local PARTITION 2019-03-05 FINAL DEDUPLICATE;
OPTIMIZE TABLE t_local PARTITION (2019 - 3) - 5 FINAL DEDUPLICATE
Ok.
0 rows in set. Elapsed: 0.009 sec. -
и 0 эффекта
-
имя партиции смотрите в system.parts оно либо 20190305 либо '2019-03-05' либо 201903
-
да, верно. спс. но результат тот же, увы
-
OPTIMIZE TABLE t_local PARTITION 20190305 FINAL DEDUPLICATE
Ok.
0 rows in set. Elapsed: 0.049 sec. -
все это странно, я бы поискал ошибку у себя в коде, залогировав cat file_XXX.tsv | clickhouse-client --query
потом попробовал лить прямо в ReplicatedMergeTree на одном шарде, возможно ошибка в описании кластера, но тяжело понять как так ошибится, чтобы дубликаты появлялись не сразу. -
вопрос снят. Спасибо @BlackMerlinKR Как озказалось не работает для обычных mergeTree
-
спасибо - будем экспериментировать - кстати удачно в соседнем сообщении увидел слово DEDUPLICATE - выполнил с ним OPTIMIZE - как минимум дубли получается убрать - плохо что этого в документации нет
да - запросы логировали - в них в written_rows совпадает с кол-вом строк в файле, хотя счас нашел несколько дублированных инсертов -
-
-
формально это вообще не про дубли.
есть движок replacingmergetree , в нем есть понятие версии, новая версия записи в нем перетирает старую.
почитайте, и потренируйтесь [ select from table ] vs [ select from table final ]
OPTIMIZE TABLE FINAL вызывает процесс слияния который оставляет последнуюю версию (кроме случаев [длинный список] )
DEDUPLICATE-устаревшая фигня которая вообще ни на что не влияет. -
в новом синтаксисе
create table aaaa (поля)
partition by toYYYYMMDD(some_datetime_column)
для месячных партиций (по старому)
partition by toYYYYMM(some_datetime_column) -
-
никто ничего не создаст, откуда такие фантазии?
where dateTime_colum >= будет исключать партиции из-за максимального и минимального значений (атрибутов партиции) поля dateTime_colum (по которому партиционировано)
индекс (order by) будет работать из-за монотонности? toYYYYMM(some_datetime_column) -> some_datetime_column -
Joined.
-
-
Да, ок
-
-
у нас и 2-я таблица с replacingmergetree есть - там тоже дубли появляются, но в ней OPTIMIZE ... FINAL дубли убирал, а на просто mergetree OPTIMIZE FINAL не проводил к дедупликации, а после добавления DEDUPLICATE - дубли исчезли (я прада пока только на одной партиции оппробовал) - чудеса, кликхаус 19.1.6
-
OK, это интересно, я думал что deduplicate атавизм для replacing , был момент когда оставались версии (дубли) если они были в одном (последнем) парте.
-
/stat
-
-
-
-
Ошибка какая?
-
-
колонка в ключе? Покажи show create table
-
-
Поле типа Nullable нельзя включать в индексы, а у вас tuple партицирование
-
Кроме того использование Nullable может снижать производительность
-
Можно добавить колонку с датой и сделать партицирование по ней?
-
Или принципиально нужна такая схема
-
не, все хорошо, спсибо
-
-
-
https://clickhouse.yandex/docs/ru/query_language/insert_into/
Замечания о производительности¶
INSERT сортирует входящие данные по первичному ключу и разбивает их на партиции по месяцам. Если вы вставляете данные за разные месяцы вперемешку, то это может значительно снизить производительность запроса INSERT. Чтобы избежать этого:
Добавляйте данные достаточно большими пачками. Например, по 100 000 строк.
Группируйте данные по месацам самостоятельно перед загрузкой в ClickHouse. -
По практике могу сказать, что построчно тратит столько же ресурсов, что балком
-
А вот время экономится
-
Так что, если данных много, подбирайте пачку из диапазона 50к-200к строк
-
👍
-
А предсортировка всё ещё помогает ускорить импорт? Или в 19.3.6 не актуально?
-
При составном ключе партицирования
-
ну если партиции сделаны например partition by ( toYYYYMMDD(), a % 13 ) order by ttt,X
то надо стараться чтобы в инсерте были данные которые лягут в одну партицию ( toYYYYMMDD(), a % 13 )
иначе нарушается атомарность инсерта и получается много мелких инсертов
и лучше их предсортировать по (ttt,X) тогда КХ-у проще сортировать - 07 March 2019 (239 messages)
-
А есть вообще кейсы с использованием КХ на таких настройках? Уж очень КХ хочется использовать...
-
всем привет вопрос по поводу обычного view, допустим у меня есть view as select * from table если я делаю select * from view where date = 'somedate' а в оригинальной таблице primary key по date это ограничит выборку из оригинальной таблицы или все же сначала будет сделан select * из оригинала а затем where date из результата?
-
увидел, спасибо
-
привет! подскажите, а не появилась в кх возможность пронумеровать строки в группе в порядке сортировки? спасибо
-
-
попробую все же сформулировать при запросах в distributed из Табло вылазит вот такая ошибка:
HTTP status code: 404 Received error: Code: 47, e.displayText() = DB::Exception: Unknown identifier:
тра та та набор полей в таблице которые точно есть, а затем:
masked_columns: array_join_columns: source_columns: , e.what() = DB::Exception
Unable to calculate the sort for the field 'Country'. The display may not show correct data.
а изначально ругнулось на: distributed_product_mode deny после чего я попробовал и local и global, но это никчему не привело.
при этом из локальной таблицы тот же репорт нормально строится впрочем как и из custom sql вида select * from distributed
куда копать? табло же само генерит эти квери... -
помогло но как то не до конца
-
Доброе утро,
подскажите как корректно наполнить materialized view
с движком AggregatingMergeTree
Нужно сделать view на таблице в большим кол-вом данных (>3Тб)
При попытке создать view с populate операция создания падает по памяти, даже с опциями сброса на диск результатов группировки (max_bytes_before_external_group_by ), это без учета того что часть данных не попадет во view во время создания.
Нашел в истории чата что можно сделать через промежуточную таблицу с Null движком.
Может кто-нибудь дать пример ? -
Joined.
-
Вариант с таблицей с движком Null используется для того чтобы не хранить исходные данные. А вы пробовали отдельно создать таблицу с движком Aggregate, и залить данные через INSERT... SELECT?
-
Привет! Столкнулись с такой проблемой: сделали materialized view, в которую вставляются данные из Distributed таблицы, но данные в mat view попадают только те, которые вставляются на ту шарду, где находится mat view.
Можно ли как-то сделать, чтобы в mat view попадали данные из Distributed таблицы со всех серверов, а не только с того же, где находится mat view? -
Матвью создана на каждом шарде?
-
-
-
-
-
-
Могу поделиться чартом
-
Хотя не факт что это поможет тут
-
версия ODBC драйвера какая?
-
релиз от 2018
-
Это называется репликации. Вы точно не путаете шардирование данных и репликации?
-
последний
-
-
потому что 2019 на маке не функционален
-
предпоследний 2018?
-
-
Скорее всего вы вставляете в distributed таблицу и она направляет данные на соответствующиц шард в матвью. Чтобы матвью была полная и везде, вам нужна репликация
-
v1.0.0.20181017 я на этом и сижу
-
а код Табло можете записать (Performance Recording)?
-
попутно, если я там где табло использует поле Country напрямую делаю Group из этого поля и подставляю в rows этот лист начинает работать
-
беда в том что и в других местах такое проскакивает и так просто не чинится
-
сейчас попробую
-
Смысл в том, что таблица шардированная, а mat view, который делает select из этой таблицы - нешардированный, и должен на одной своей шарде содержать результат агрегации из всех данных шардированной таблицы. А по факту туда попадают данные, которые вставялются только на ту шарду, где находится mat view, а нужно, чтобы попадали данные со всех шард.
-
есть место еще где сделан brakedown_by в виде case если параметр такой то подставить поле такое то, для группировки и вот там та же фигня:
Unable to calculate the sort for the field 'breakdown_by'. The display may not show correct data. -
-
Так а у матвью селект идёт из какой таблицы? Которая дистрибьютед?
-
да
-
-
Оформите issue с описанием схем таблиц и настройками шарда - нужно больше деталей
-
Уточните, пожалуйста, как мне поможет таблица Aggregate ? Она же вдальйшем не будет обновлять данные при вставке в исходную таблицу, как MA . А если использовать ее как промежуточную , то затем создавать Aggregating view поверх Aggregating table ?!?!
Я хотел сделать Null таблицу аналогичную исходной таблице , поверх Null таблицы сделать Aggregating MA и сделать INSERT... SELECT из исходной таблицы в null
так чтоб данные попали только в Aggregating MA
но как после завершения вставки переназначить Aggregating MA на исходную талицу ? -
-
Запрос создания Aggregating МА:
1. Создаёт таблицу типа Aggregating
2. Создаёт матвью, триггер на инсерт из исходной таблицы на таблицу из пункта 1.
Но для вашего случая, когда pooulate не срабатывает можно руками создать таблицу с движком Aggregating и матвью, смотрящую на эту таблицу. И после сделать INSERT.. SELECT -
вобщем проблема проявляется на tableau desktop на маке с октябрьским драйвером
-
я залил workbook на сервер там он открывается и работает нормально
-
с одной стороны это плохо потому что у нас вся дата на маках и им надо как то править воркбуки, с другой стороны можно просить рихтовать на локальной таблице и перед заливкой просить сменить таблицу на distributed как временное решение
-
ное если то же самое воспроизведется на linux драйвере будет грустно потому что мы переползаем с windows версии табло на linux
-
Tima т.е у меня будет цепочка исходная таблица -> aggredate table - > обычное MA . так ?
В этой схеме есть минус что aggredate table как и MA займут место на диске, это вдвое больше ожидаемого , от 3Тб исходной таблицы это будет ощутимо
и как вручную создать тригер на исходной таблице для вставки в aggredate table ? не нашел этого в документации ( -
-
через clickhouse-driver
-
-
-
-
-
-
-
-
-
Я не настоящий сварщик (что-то делал под виндой больше дюжины лет назад, когда ещё школьником был), но cl.exe — бинарник MSVC (или как там майкросовтовский недокомпилятор называется). Возможно, предполагается, что его надо поставить (если ещё не) и добавить в пути.
-
Нет, у вас будет так же как и просто при создании матвью, только таблица с агрегатами создается явно
Вместо
table -> матвью -> .inner_table (c движком AggregatingMergeTree)
У вас будет
table -> матвью -> agg_table (c движком AggregatingMergeTree)
То что я писал выше, про триггер в моей схеме - это матвью, смотрящая на явно созданую таблицу с AggregatingMergeTree -
-
Tima
правильно я понимаю что это будет что-то вроде этого
create table agg_table (col_date date, col_int Uint16 , AggregateFunction (count, UInt16, UInt32) as col_agg ) ENGINE = AggregatingMergeTree Partition by toDate(col_date) order by col_date ;
create MATERIALIZED VIEW agg_mva to agg_table AS select col_date , col_int , countState from table_source group by col_date, col_int order by col_date ;
insert into agg_table (col_date, col_int , col_agg) select col_date , col_int , countState from table_source group by col_date, col_int order by col_date ; -
я никого не видел, кто смог поженить Tableau Server for Linux и clickhouse-odbc (любой версии). Если у Вас получится -- буду рад узнать подробности.
-
А вот это прискорбно
-
Если все так, то это будет такой дилбрейкер
-
Ну скоро узнаем
-
Я поженил. В чем проблема?
-
Odbc драйвер поставили на Windows server?
-
-
то есть книга / источник, опубликованные на Tableau Server for Linux работает (отрисовываются worksheets / dashboards / можно открыть в режиме Web edit)?
-
@yurifal а в чем кстати сложности? ну тоесть я публиковал workbook сделанный на маке на вин сервер и он работал. в чем конкретно были проблемы с Linux табло?
-
не видит драйвер?
-
или видит но не работает
-
Connect from Tableau Server for Linux · Issue #152 · yandex/clickhouse-odbc
Hi dev team, Here below is the description of the problem with connecting Tableau Server for Linux to CH via ODBC. The environment: (CH) -- ClickHouse v.18.16.1 in Docker container on macOS Mojave ...
-
печаль
-
ну я попробую, может что то накопаю, а на сколько функционален jdbc?
-
Joined.
-
Joined.
-
для Табло -- пока что практически никакой. хотя коннект под linux есть 🙂
-
Есть странное поведение кликхауса. Один скрипт с запросами (A) кушает 10 ядер, и выполняется за T времени. 2A кушают 20 ядер, но выполняются за 2T, хотя за 2T по идее должно быть 4A
-
какими вычислениями занимаются ядра?
-
Распаковкой данных наверно
-
Всем привет, подскажите как быть. Мне нужно хранить дескрипторы картинок, но для сравнения нужно расчитавать евклидово расстояние, получается чтобы найти объекты нужно фулскан сделать?
-
Всем привет, есть ли возможность делать распределенные запросы к системным таблицам?
Создал distributed табличку, которая смотрит на системную, но похоже что данные читаются только из локальной системной таблички -
ну хоть они и данные распаковывают, с 20 ядрами то все равно должно было быть 2 процесса одновременно выполнится
-
Раньше было можно, думаю и сейчас сильно
-
Ну если данных много и упирается в пропускную способность то будет в два раза дольше
-
Вы же видите что происходит вдс время выполнения запроса и можете сами сделать вывод правильный а не заставлять нас гадать на кофейной гуще
-
ну проблема что эти запросы даже не последовательно выполняются, а ждут пока выполнятся параллельно
-
если бы через T выплевывался бы один запрос, а через второе T второй - то не так страшно было бы
-
а они оба выдаются через 2T
-
Привет, кто-то решал задачу стримминга или периодичекого копирования новых данных из PSQL в ClickHouse? Есть какие-то простые решения?
-
Через remote. Вот примерчик:
SELECT database,
table,
any(engine),
sum(rows),
formatReadableSize(sum(bytes))
FROM remote('host1,host2,host3',system, parts)
WHERE database IN ('default')
GROUP BY database,
table
order by sum(bytes) desc; -
Ну вы запустите и посмотрите что они делают
-
-
ну т.е это никак не ускорить?
-
Ну вы смотрите как запрос идёт в консоли
-
А не пс
-
а что я должен там увидеть?
-
20 rows in set. Elapsed: 6.150 sec. Processed 244.29 million rows, 21.53 GB (39.72 million rows/s., 3.50 GB/s.)
это при двух запусках -
20 rows in set. Elapsed: 3.260 sec. Processed 244.29 million rows, 21.53 GB (74.95 million rows/s., 6.60 GB/s.)
это при одном -
результаты одинаковые
-
а вот скорость
-
ок, спасибо
-
-
Привет
Помогите разобраться с перформансом.
Результаты теста такие:
1 mil lines =23 sec
4 mil lines = 35 sec
11.5 mil lines = 90sec
21 mil lines=140sec
The spark application seems to wait after clickhouse server for most of the time:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11741 clickho+ 20 0 30.645g 7.501g 44212 S 122.5 3.0 13:53.46 clickhouse-serv
17544 andrei 20 0 8623208 587076 34052 S 5.0 0.2 0:28.46 java
Датасет: https://clickhouse.yandex/tutorial.html
time ./spark-2.4.0-bin-hadoop2.7/bin/spark-submit --jars clickhouse-jdbc-0.1-SNAPSHOT-jar-with-dependencies.jar --executor-memory 20G clickhouse_test.py
#!/usr/bin/python
from pyspark import SparkContext
from pyspark.sql import SQLContext
sc = SparkContext("local", "first app")
sqlContext = SQLContext(sc)
dataframe=sqlContext.read.format("jdbc").option("url", "jdbc:clickhouse://localhost:8123/datasets").option("driver", "ru.yandex.clickhouse.ClickHouseDriver").option("dbtable", "ontime").load()
dataframe.show(10)Tutorial | ClickHouse DocumentationClickHouse Tutorial What to Expect from This Tutorial? By going through this tutorial, you’ll learn how to set up a simp
-
а как вы это сделаете?)
-
Они все простые, берете данные которых нет в КХ и пишите в него через пайп psql|clickhouse-client
-
ФК нет в КХ, вы не сможете их использовать
-
что еще в итоге можно сделать?
-
-
foreign key и джоин это не одно и то же
-
-
foreign key это просто некоторое ограничение, позволяющее гарантировать целостность и консистентность данных. Его наличие или отсутствие (например, в postgres) никак не влияет на возможность делать join.
-
Joined.
-
а в mysql он насстолько тормозной что уже при миллиона записей приходится его выкидывать
-
Есть еще узкие места - диск / память / энтропия / сеть
-
Таблица с engine = odbc
-
есть предположения куда посмотреть ?
-
Просто ищете по индексу (order by) в окрестности итеративно и все. Сейчас кто-то комитит zcurve индекс -- тоже поможет, кмк.
-
-
На sql запрос.
-
-
-
-
Даже если вы не упираетесь в диск и сеть, и упираетесь в CPU, то скорее всего у вас такие запросы, которые просто не выигрывают от HyperThreading, и для ClickHouse это вполне логично, поскольку он итак очень хорошо утилизирует процессор и в том числе довольно неплохо избегает простоя конвейера при ожидании памяти, например.
-
Joined.
-
Joined.
-
Больше чем в документации?
-
Что нужно знать об архитектуре 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. - Как диагностировать…
-
https://groups.google.com/forum/#!topic/clickhouse/y_Gx27UAd1U
нашел кое что интересное, спасибо -
ага, спасибо посмотрю.
-
еще для понимания есть вот такое видео https://events.yandex.ru/lib/talks/5800/
-
Появилась вакансия C++ разработчика ClickHouse: https://yandex.ru/jobs/vacancies/dev/dev_clickhouse/Разработчик ClickHouse
Яндекс — одна из ведущих ИТ-компаний с офисами в 21 городе России. Создаёт сервисы для прямых пользователей и бизнеса. В команду ищет профессионалов, которые ценят открытость и свободу и стремятся менять мир к лучшему. Вам это близко? Откликайтесь на вакансии.
-
None
-
змеи искусители :)
-
-
Каскадирования у мат вью нету. Навешивайте все вью на Кафка таблицу.
-
Требования пугают =)
-
-
м?
-
-
из гугла отхантил?
-
из Джета
-
Очень общие, не понятно к чему готовиться
-
вроде проще некуда.
смотришь репозиторий и готовишься))) -
-
-
багофича. :) Обычно несложно переделать чтобы всё из единственного источника заполнялось.
-
фича.
Только одна кафка таблица. Все 42 вью смотрят на одну таблицу.
Вью не читают кафка таблицу, они получают пуши. -
проблема в доке КХ. 🙁
Там написано что прочитать данные из кафка таблицы можно один раз. И это видимо взрывает людям мозх. -
Вью не читают кафка таблицу, они получают пуши.
-
Надеюсь перед ним поставят задачу сделать встроенную кластеризацию и выпилить zookeeper в /dev/null
-
ооо, боже, я челюсть вывернул от смеха.
-
У вас нет в планах выпустить видео-туториал с примерами разработки Clickhouse? Что-то вроде видео-воркшопа с best practices по разработке функциональности Clickhouse...
Думаю, было бы полезно для тех кто хочет присоединиться к open source разработке. -
@milovidov_an
-
Если у вас есть на примете разработчик, которому такое по плечу, то конечно скиньте ему эту вакансию :)
-
-
А вот это спорный вопрос
-
-
эх, у меня тут статус админа, поэтому вроде положено быть серьезным (хотя бы немного). Но да, представить себе как новый член команды с энтузиазмом берется выпиливать ту часть системы, которая как раз обычно "просто работает" не создавая проблем, при том что много других вещей для работы... Действительно звучит забавно. :) Дополнительные руки нужны, есть чем заняться и без "выпиливания зукипера" :)
-
-
не, не нужно, нужен один - железно работающий и конфигурируемый парой-тройкой команд, а не медитацией над конфигурацией.
-
-
яндекс облако.
-
-
-
Можно и distributed табличку создать, главное кластер описать правильно
-
Привет!
Я только начинаю работать с clickhouse. Пытаюсь установить clickhouse и каждый раз получаю ошибку при установке
$ clickhouse-client
ClickHouse client version 19.3.6.
Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000, 127.0.0.1)
Подскажите, пожалуйста, сталкивались ли вы с подобным. -
Возможно, у вас уже 9000 порт занят.
-
-
Это чистая только что созданная виртуалка
-
а вы запустили службу?
service clickhouse-server start
что показывает
ps -ef|grep clickhouse -
clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Thu 2019-03-07 15:28:08 UTC; 6s ago
Process: 3772 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml (code=exited, status=232/ADDRESS_FAMILIES)
Main PID: 3772 (code=exited, status=232/ADDRESS_FAMILIES) -
что в /var/log/clickhouse-server/clickhouse-server.log ?
-
Запустить, я запиустила, но после запуска статус как указано выше
-
Пусто там
-
journalctl -u clickhouse-server.service
-
Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
-- Logs begin at Thu 2019-03-07 15:10:55 UTC, end at Thu 2019-03-07 15:11:38 UTC. --
-- No entries -- -
sudo journalctl -u clickhouse-server.service
-
-
-
-
Это через users.xml надо следать?
-
sudo ls -ld /var/lib/clickhouse/
sudo chown clickhouse.clickhouse /var/lib/clickhouse/
sudo service clickhouse-server start -
Кажется, вся проблема в том, что у меня в /var/lib
нет clickhouse -
sudo ls -ld /var/lib/clickhouse/
ls: cannot access '/var/lib/clickhouse/': No such file or directory -
-
У любого достаточно большого проекта список незакрытых ишью обычно исчитывается сотнями. У etcd или consul - тоже сотни.
https://github.com/etcd-io/etcd/issues
https://github.com/hashicorp/consul/issues
Это говорит не о качестве продукта (там 100 незакрытых багов - какой ужас), а о том что сотни и тысячи людей его использовали в самых разных обстоятельствах, и наступили на все возможные грабли. Если речь о сроках исправления - то рук не хватает всегда и везде, а если вы когда-то работали над большим проектом - то должны понимать - что сам факт "наличия граблей", не означает что их оттуда всегда можно легко убрать не разрушив какие-то другие части системы.etcd-io/etcdDistributed reliable key-value store for the most critical data of a distributed system - etcd-io/etcd
-
а матвью можно над replicated? то есть если у меня реплики А и Б, и матвью над ними (МА и МБ), при репликации с А на Б, например, не будет двойной записи?
-
в матвью ^
-
Так или иначе - вопрос zookeeper / etcd / consul - это просто очередная "религиозная война". Как и в любой такой войне смысла в ней - ноль, а любые попытки "окончательного решения" путём "выпиливания" чего бы то ни было - обычно ни к чему хорошему не приводят.
-
Вообще я не про это, но в отличии от etcd и consul - zookeeper тащит за собой ещё и jvm в котором ещё вагон (даже состав) багов (тоже самое касается и kafka vs nats).
Но не суть, я лишь выразил надежду. А так пока отдаю предпочтение scylladb - у неё кластер "в коробке".
Не у всех, как у яндекс, 100-500 серверов под боком. -
Joined.
-
можно создать
sudo mkdir /var/lib/clickhouse/
sudo mkdir /var/log/clickhouse/
sudo chown clickhouse.clickhouse /var/lib/clickhouse/
sudo chown clickhouse.clickhouse /var/log/clickhouse/
sudo service clickhouse-server start
А вообще какой линукс? Убунту? Нет ли лога как вы ставили? Каталог должен был создаться. -
На вкус и цвет товарищей нет.
А проблема с "кластером из коробки", и 100-500 серверов не понятна.
Я например у себя локально для экспериментов регулярно поднимаю кластер КХ в docker-compose на едиственной машине. А стейджингу у нас хватает "кластера" из 2 стареньких серверов (я не в Яндексе работаю, если что - пусть мой админский статус не вводит в заблуждение). -
Ubuntu 18.4 Ставлю по описанию тут https://clickhouse.yandex/docs/en/getting_started/
deb http://repo.yandex.ru/clickhouse/deb/stable/ main/
If you want to use the most recent version, replace stable with testing (this is not recommended for production environments).
Then run these commands to actually install packages:
sudo apt-get install dirmngr # optional
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4 # optional
sudo apt-get update
sudo apt-get install clickhouse-client clickhouse-server -
Спасибо большое! Все заработало.
-
MV получают буфер от insert (репликация никак не влияет), саму таблицу MV не читает (кроме стадии populate). Поэтому таблица может иметь движок Null и быть пустой.
Стандартная схема: создаете MV там же где и таблицы, MV тоже replicated.
Т.е. MV получает вставляемый блок, вычисляет select , кладет в репликейтид таблицу (ее можно создать явно, заранее). Данные MV реплицируются на другую ноду. -
18.04? Попробовал в докере - всё создалось.
-
а есть таблица distributed? та же самая схема?
-
Не, не к месту поговорка.
Кластер "из коробки" это когда вы не по всем хостам ch и зукиперам бегаете в случае чего (ну и перед этим пилите кучу скриптов для zabbix/prometey/etc), а когда вы на любом узле кластера можете ввести например ceph status и получить информацию о его состоянии, когда вы можете [де]промоутить любой узел через cli как это делается например в pve или nats.
Про 100-500 серверов - https://clickhouse.yandex/docs/ru/operations/tips/#zookeeper - "Не запускайте ZooKeeper на тех же серверах, что и ClickHouse. Потому что ZooKeeper очень чувствителен к задержкам, а ClickHouse может использовать все доступные системные ресурсы.", https://stackoverflow.com/questions/50437481/confusing-zookeeper-memory-usage
Про эксперименты - без комментариев (не о них речь).Confusing Zookeeper Memory usageI have an instance of zookeeper that has been running for some time... (Java 1.7.0_131, ZK 3.5.1-1), with -Xmx10G -XX:+UseParallelGC. Recently there was a leadership change, and the memory usage o...
-
не понял вопроса, В смысле запись через distributed ?
-
да
-
тоже самое, там хитро, distributed делает инсерт в локальные таблицы и этот инсерт инициирует пуш в MV
-
А пуш в MV асинхронный? Если не пройдет, то основной insert тоже упадёт?
-
Это тоже вопрос "религии". Я например люблю видеть конфиги. Конретные и понятные. Захочу - на другой сервер скопирую, захочу - откоментирую какую-то строку. Это очень в духе unix. Когда все через cli или через веб-морду - всё слишком эфемерно и к тому же нужно всякие команды помнить. Например в на хосте с редис-слейвом никогда не помню как проверить адрес мастера, а в Couchbase всё через веб-морду и не понятно как проверить "что поломалось" из шелла.
Видеть статусы всякие в КХ можно (нескложно - просто нужно в таблицы из базы system смотреть, если хочется - можно с одного сервера на всех серверах сразу). -
нет атомарности, синхронно, сначала все вью по алфавиту или паралленьно, потом таблица.
например вставляем 2млн записей одним инсером.
Есть три MV (A, B, C) -- имена по алфавиту и таблица T.
первый (блок) миллион (max_insert_block_size) вставился успешно в A,B,C и Т
второй блок вставился в A,B . Тут отвалился зукипер, в С пусто, в Т тоже пусто.
таже байда есть вставка 1млн в несколько партиций (на границе месяца).
Есть возможность паралленьной заливки во вью (parallel_view_processing), там как получится так и получится. -
да это не страшно если будет явно ошибка и поретраить можно и в итоге сойдется
-
я больше беспокоился что сначала в таблицу а потом асинхронно в MV и там уже не поймешь состояние insert (ретраить или нет)
-
Да какая тут религия и дух unix, речь о эксплуатации. В эксплуатации - за "захочу" можно больно по жопе получить.
Все конфиги - только под контролем версий, деплой узла только сценарием, ввод в эксплуатацию новой ноды - по плану, не нужно команды/параметры помнить их надо в управление конфигурациями вписывать и деплоить.
Вся "радость" начинается когда надо разрешать различные ситуации, типа io в пол упало, начало выжираться озу, oomkiller планомерно убивает процессы, у ядра уже pid_max выжран.
Про возможности ch в плане языка запросов - просвещён, не утруждайтесь. -
почти понял. пример: записываю в реплику А, данные появляются в МА, а также реплицируются в Б. Как данные попадают в МБ? череб А->Б->МБ или А->МА->МБ?
-
-
второе (если у вас вьюшки тоже реплицированы)
-
спасибо
-
а за счет чего это работает? точнее, почему данные при попадании в Б не попадут в МБ? просто интересно
-
репликация не делает insert , она скачивает бинарный парт
-
Понял
-
По прежнему не понимаю чего вы хотите от Кликхауса в плане управления кластером если у вас его oomkiller убивает, или "в потолок" по файлам упираетесь. Короче, мало конструктивный диалог получился, но продолжать не будем. Может в следующий раз получится лучше. Хорошего Вам вечера.
-
привет, подскажите пожалуйста в чем разница в форматах DDL:
CREATE TABLE test_db.foo_table on cluster `foo_cluster` ( purchase_id String, day Date)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_db.foo_table', '{replica}', day, purchase_id, 8192)
и
CREATE TABLE test_db.foo_table on cluster `foo_cluster` ( purchase_id String, day Date)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_db.foo_table', '{replica}')
order by (purchase_id) partition by day SETTINGS index_granularity = 8192 -
Разница в order by, уберите скобочки:
CREATE TABLE test_db.foo_table on cluster `foo_cluster` ( purchase_id String, day Date)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_db.foo_table', '{replica}')
order by purchase_id partition by day SETTINGS index_granularity = 8192 -
а не подскажите на что это влияет?
-
первый устаревший, и не позволяет партиционировать произвольно.
И кстати '{replica}', day, purchase_id, 8192)
соотвествует месяцу, поэтому вам надо = partition by toYYYYMM(day) -
Joined.
-
Т.е. устаревшее
CREATE TABLE test_db.foo_table on cluster foo_cluster ( purchase_id String, day Date)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_db.foo_table', '{replica}', day, purchase_id, 8192)
эквивалентно
CREATE TABLE test_db.foo_table on cluster foo_cluster ( purchase_id String, day Date)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_db.foo_table', '{replica}')
partition by toYYYYMM(day) order by (purchase_id) SETTINGS index_granularity = 8192 -
спасибо! сейчас попробую так.
-
сначала надо понять как так получилось, и затем либо удалить в зукипере мусор от старых экспериментов либо написать create table правильно.
-
а подскажи partition by day || partition by toYYYYMM(day)
в чем тут разница? -
дневные партиции vs месячные партиции
если вы не знаете зачем вам дневные партиции, используйте помесячные. -
я просто словил чтото странное.
я вставляю в табличку PARTITION BY day 1317570 записей, на выходе
SELECT count(*)
FROM test_db.ver12345_test
┌─count()─┐
│ 2618424 │
└─────────┘
Только что попробовал PARTITION BY toYYYYMM(day) и на выходе
SELECT count(*)
FROM test_db.ver123456_test
┌─count()─┐
│ 1317570 │
└─────────┘
получилось нужное кол-во строчек. Не подскажите почему так? -
ошибка у вас. Полностью вывод всех команд покажите. Партиционирование здесь не влияет.
-
дада, я верю, просто не могу понять куда даже смотреть :(. Вставляю батчами по 200к строк.
-
Вот тут вы правы, у КХ очень все "бедно" с тулингом, нужен некий clickhouse-cli кторый заавтоматизирует часть рутинных операций чтоб не приходилось бегать по машинам, я даже как-то начинал делать, но потом приоритеты поменялись. Насчет ZK - это, к счастью или сожалению, достаточно неплохое решение которое позволяет делать 2-е штуки: с гарантией хранить то что в него записали, поверх ЗК легко реализовывать выборы/распределенные блокировки и все то что написано в его рецептах. Все это можно встроить в КХ, но на это нужно время как на разработку, так и на вылавливание багов, второе сильно критично. Так что выкидывание ЗК не сильно приоритетно, хотя сейчас и есть возможность попробовать прикрутить etcd/consul etc и попробовать
-
при этом что странно смена PARTITION BY toYYYYMM(day) дубли убрала :(. какая то магия.
Попробую собрать вывод команд. -
все так, только сначала в таблицу, потом во вью
-
да, вы правы, я ошибся.
create table testX ( A Int64) engine=MergeTree order by tuple();
create MATERIALIZED view testXA engine=MergeTree order by tuple() as select * from testX;
create MATERIALIZED view testXB engine=MergeTree order by tuple() as select throwIf(A=20000000) from testX;
create MATERIALIZED view testXC engine=MergeTree order by tuple() as select * from testX;
insert into testX select number from numbers(100000000) settings max_block_size=10000;
DB::Exception: Value passed to 'throwIf' function is non zero: while pushing to view dw.testXB
select count() from testX
21000000
select count() from testXA
21000000
select count() from testXB
19950000
select count() from testXC
19950000 -
truncate table testX;
truncate table testXA;
truncate table testXB;
truncate table testXC;
clickhouse-client --parallel_view_processing=1
select count() from testXC
21000000 -
Возможно пришла пора повысить приоритет, https://github.com/yandex/ClickHouse/issues/479#issuecomment-467279591Consul instead ZooKeeper · Issue #479 · yandex/ClickHouse
ZooKeeper - need Java VM on every znode, no service discovery, etc ... Consul - one binary, and other https://www.consul.io/intro/ and https://www.consul.io/intro/vs/zookeeper.html How about add su...
-
Joined.
- 08 March 2019 (153 messages)
-
-
Зачем? Тулзы никак от этого не зависят, они внезапно не появятся при добавлении consul/etcd etc, а вот проблем это поднакинет, нужно будет поддерживать еще какие-то стораджи. Возможно кто-то и добавит поддержку, но это явно не приоритетная задача. По issue: наличие JVM - да, дополниельная зависимость, service discovery - все данные в ZK есть.
PS: как по мне то сейчас логичнее попробовать https://github.com/etcd-io/zetcd и если с ним есть проблемы то порешать их на стороне zetcd -
зукипер работает и кушать не просит, тем более там где начинается кафка (грефневая) зукипер все равно имеет емсто быть, почините плиз odbc драйвер ( даже под виндой есть проблемы с distributed таблицами (((
-
зачем чинить то что не поломалось, когда есть что чинить и так...
-
ZK и Consul не одно и то же, не нужно путать сервис координатор и сервис дискавери
-
Мм, тут вроде был похожий вопрос, но может я и ошибаюсь, если у меня есть на каждой ноде materialized view который смотрит на локальную таблицу, и есть distributed который смотрит на все такие таблицы на шардах, то если я делаю инсерт в distributed, разве мат вью не должен наполняться? Я почему то был под впечателением что должен. Потому что у меня не наполняется.
-
или не должен?
-
А у меня в результате наполнения распределенной таблицы вылетает вставка с ошибкой.
-
Думаю, должен.
-
Но почему то не наполняется
-
При том что если инсертнуть не в дистрибютед а просто в локальную то все окей
-
А вы мп используете для чего?
-
Мп?
-
Материальное представление
-
Результат селекта из мердж три в самминг
-
Я пытался сделать на мп предрассчет группировок
-
А, вы просто сворачивает данные из нод?
-
Ну я хочу на каждой ноде сворачивать из локальной таблицы в локальный мв мп
-
А инсертить допустим в дистрибутед
-
Мне почему то казалось что это должно работать
-
Вот и у меня такая же мечта. Чтоб распределением по нодам занимался КХ, а сбоку можно было бы еще что-то сделать.
-
Ну тоесть я могу инсертить и на каждой ноде отдельно
-
Просто иногда бывает нужно загнать руками кусок данных
-
Ну и плюс на каждой ноде инсертить это надо ещё дополнительно строить
-
Странно конечно
-
Может я что то не то делаю
-
Или включить надо дополнительно что то
-
Если получится я сообщу вариант использования.
-
Joined.
-
Аналогично )
-
Спасибо
-
How to use `Distributed` with `MaterializedView` · Issue #467 · yandex/ClickHouse
CREATE TABLE IF NOT EXISTS insert_view(...) ENGINE = Null; CREATE MATERIALIZED VIEW data_local ENGINE = AggregatingMergeTree(..., sumState(num1) as num1,sumState(num2) as num2,sumState(num3) as num...
-
и работает, видимо я где то намудрил при создании таблиц, так что вопрос снят, спасибо
-
Joined.
-
Всем привет! Ребята, вчера странная тема возникла, на Гугл клауде проапгрейдил сервер и поменялся только ip (эфемерный), ничего не поменялось, сам ClickHouse как был так и остался, все папки на месте, НО!! База данных вся почистилась, то есть таблицы все на месте, но данные пропали. Как так?
-
-
-
Joined.
-
-
-
мм а точно данные пропали?
-
-
свободное место на диске?
-
Это миф. Назначение и набор функций сопоставимы, различие только в алгоритмах обеспечения консенсуса, а гарантии обеспечения консистентности - одинаково ограничены.
-
-
Ну там не так много данных и там есть место
-
и в вар либ кликхаусе или где оно там
-
что есть?
-
??
-
сами файлы базы в каком состоянии? и они есть или их нет?
-
может с обновой пути сбросились какие-то? не видит куда дата сложена
-
Стоп, а как же тогда структура сохранилась
-
-
честно не знаю, не могу сказать, в какой паке лежит?
-
по дефолту /var/lib/clickhouse или посмотреть в config.xml если мне память не изменяет
-
Скорее всего что то с конфигом. При обновлении инсталятор задает вопрос, закинуть новый дефолтный конфиг или оставить старый. Скорее всего ты выбрал закинуть новый конфиг, и что то сломалось
-
Гугл клауде проапгрейдил сервер и поменялся только ip (эфемерный),
я подозреваю апгрейд был инстанса -
а не софта
-
или таки софта?
-
Глянь для начала что творится в директориях:
/etc/clickhouse-server/
и /var/lib/clickhouse -
Всем привет.
Если не затруднит, нужен совет знающих.
Задача такая: в системе учета есть документы поступления товаров (разные типы документов генерируют приход) и документы расхода товаров (тоже разнотипные типа продажи, списания и т.п.). В каждом документе указано кол-во и цена. Расход делается по методу ФИФО, соответственно тек. цена продукта должна браться из того документа поступления, на котором на данный момент находится указатель ФИФО. Пример:
+ поступило 3 шт по цене 5
+ поступило 4 шт по цене 6
- 2 шт по цене 5 (так как по ФИФО расходуем первую закупку, и в конце операции от нее еще осталась 1 шт)
- 2 шт по цене 5 и 6 (1 шт добрали из первой закупки по цене 5 и 1 шт - из второй по цене 6)
и т.д. расход всё время догоняет приход и цена рассчитывается в зависимости от того, товары какой закупки мы расходуем в каждом конкретном расходе.
Сложность задачи несколько возрастает из-за того, что юзер например может удалить любой из документов расхода-прихода, и указатель ФИФО соответственно может сдвинуться вперед или назад.
Цель: быстро уметь сводить по продукту все его приходы/расходы и определять где сейчас находится указатель.
Могли бы вы подсказать или дать направление, типичная ли это задача для КликХауза? Если да, то должен ли я использовать тут какой-то из специализированных движков (AggregatingMerge?) или дефолтный Merge тут лучше? Или может надо иметь 2 таблицы - одна со всеми приходами и другая со всеми расходами - и как-то динамически запросом накладывать все расходы на все приходы.
Спасибо. -
КХ очень для этого подходит, вот только сделать партиальный учет на нем... пока не видел реализаций.
-
инстанса
-
/var/lib/clickhouse - такой нет
/etc/clickhouse-server/ - ну мой старый конфиг и users.xml -
Инсталяция случайно не в докере?
-
-
-
Это странно, может конечно я не знаком со всеми нюансами кликхауса, но вроде как во всех дистрах он создает директории для БД по пути /var/lib/clickhouse
У меня сейчас доступа нет к серверу, но думаю где-то в конфиге это значение можно предопределить -
понял, спасибо, буду думать в след раз сделаю бекап партиции
-
Народ, поделитесь практиками, как бекапите clickhouse и автоматизируете этот процесс?
-
Ну в принципе автоматизировать как его я понимаю, но вот в отличии от той же mongodb или mariadb насколько понимаю у кликхауса нет утилит для бекапа
-
Поищи, я кидал кусок скрипта для бекапа
-
Там на основе FREEZE сделано
-
Чет не вижу
-
Хм... Ладно, ща на работу залезу, ещё раз кину...
-
Окей, спс.
-
do_backup() {
QUERY="SELECT database, table, partition FROM system.parts WHERE active GROUP BY partition, table, database ORDER BY database ASC, table ASC, partition ASC FORMAT CSV"
CMD="/usr/bin/clickhouse-client"
trap "echo 'cleanup shadow'; touch /var/lib/clickhouse/shadow/BAK && rm -rf /var/lib/clickhouse/shadow/*" 0
echo "create shadow"
for row in $(echo "$QUERY" | "$CMD"); do
db="$(echo $row | cut -f1 -d',' | sed -e 's/\"//g')"
table="$(echo $row | cut -f2 -d',' | sed -e 's/\"//g')"
part="$(echo $row | cut -f3 -d',' | sed -e 's/\"//g' -e s/\'//g)"
echo "ALTER TABLE ${db}.${table} FREEZE PARTITION '${part}';"
done | $CMD -n
echo "make file backup"
/opt/backup/server_backup
} -
server_backup - отдельный скрипт, который сохраняет файлы в хранилище.
-
По-хорошему, разбор строки на поля можно было бы сделать по-другому, но было лень разбираться.
-
Спасибо, гляну
-
На всякий случай: писалось на bash, а не каком-то другом sh
-
Есть вот такая утилита https://github.com/AlexAkulov/clickhouse-backup .GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
Tool for easy ClickHouse backup and restore with cloud storages support - GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
-
Привет!
Обнаружил странную багофичу. Если на репликах несколько таблиц, часть из которых - семплированы, а часть - нет, то пользоваться settings.parallel_replicas_count > 1 становится невозможно - запросы падают на несемплированных таблицах.
Есть предложение вот тут
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp#L371
изменить условие
bool use_sampling = relative_sample_size > 0 || settings.parallel_replicas_count > 1;
на
bool use_sampling = relative_sample_size > 0 || (settings.parallel_replicas_count > 1 && data.supportsSampling());
Вопрос - сделано это было по недосмотру, или осознанно, с какой-то целью?ClickHouse/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Да я уже накопировал ей) Сейчас хочется более лучше понимать этот процесс
-
Кто-то в курсе, есть ли способ из mssql делать нативные выборки из кх? Смысл - надо почикать исторические данные из сикеля за 15 лет, а это миллиарды строк, но их нельзя удалять и они должны быть доступны всегда. Вот хочется невозможного, но вдруг есть какие-то фокусы?)
-
в PG для этого есть механизм Foreign Data Wrapper. Посмотрите про mssql, там я думаю должно быть что-то похожее.
-
Хм, не знал. Спасибо за наводку, погляжу
-
Ретроградская вакансия без Rustlang.
-
и вилки нет
-
Попробуйте табличной функцией odbc() затащить в КХ.
-
(если я правильно понял в каком направлении вы хотите забирать данные)
-
Есть инструкция для разработчиков:
https://github.com/yandex/ClickHouse/blob/master/dbms/tests/instructions/developer_instruction_ru.md -
А также видео с обзором архитектуры: https://www.youtube.com/watch?v=g5CDi8Nbut4
И, отдельно, про MergeTree и репликацию:
https://www.youtube.com/watch?v=C17XU8JXdcU -
Лайв стрим, где решается какая-то задача - ещё пока не докатились до этого.
-
Есть аналог ClickHouse на Rust: https://github.com/cswinter/LocustDB
Разрабатывается энтузиастом из DropBox. Будем наблюдать - и, конечно, брать все хорошие идеи.GitHub - cswinter/LocustDB: Massively parallel, high performance analytics database that will rapidly devour all of your data.Massively parallel, high performance analytics database that will rapidly devour all of your data. - GitHub - cswinter/LocustDB: Massively parallel, high performance analytics database that will ra...
-
-
а Кликхаус переписанный на руст - всё ещё Кликхаус? :)
-
Если API тот же, принцип работы тот же и тесты проходят, то да, это кликхаус.
-
принцип утки?
-
-
насколько я помню LocustDB это in-memory база. Он запросы по данным с диска не умел (умел персистить для рестарта).
-
Эх, любите же вы устранять "фатальные недостатки" :)
-
То зукипер надо устранить, то C++ :)
-
Ну, хочется меньше потенциальных CVE. Речь не о RIIR (rewrite it in rust) ради RIIR
-
видимо, умеет со второй половины 2018 точно
Storage backend
LocustDB has support for persisting data to disk and running queries on data stored on disk. -
оно использует роксдб)
-
Скорее заменить зукипер растовым вариантом, а там как пойдет.
-
уже же была попытка заменить его zetcd
-
там что-то пошло не так
-
-
-
@milovidov_an спасибо за ответ!
-
Кстати, где-то была задача на создание обобщенного интерфейса, но пока везде ZK (https://github.com/yandex/ClickHouse/search?p=1&q=ZooKeeper&unscoped_q=ZooKeeper). Можно этот самый интерфейс сделать и заиспользовать ZooKeeper, если все ОК то можно имплементировать бекенды для чего угодно.yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Сейчас взаимодействие с ZooKeeper разделено на два интерфейса: "бэкенд" и "фронтенд". ClickHouse использует фронтенд, который называется просто ZooKeeper (но внутри может быть что угодно). Фронтенд использует бэкенд через абстрактный интерфейс IKeeper. Этот интерфейс содержит минимум методов, необходимых для взаимодействия с ZooKeeper или другой системой. У IKeeper сейчас есть одна реализация - ZooKeeperImpl.
Всё это усложнение нужно для того, чтобы постепенно сделать то, что вы хотите - возможность работать не только с ZooKeeper. Но для начала сделаем реализацию IKeeper для тестирования - чтобы проще проверять всякие необычные сценарии.
PS. Мы открыли чат для контрибьюторов ClickHouse - чтобы можно было задавать вопросы по кодовой базе:
https://t.me/joinchat/B44Vi1T-PQA97S02SBwXIw -
Это уже сделано. Там этот "обобщенный интерфейс" назван ровно так же как единственная его имплементация, т.е. зукипер :)
-
В принципе можно пробовать сделать альтернативные бэкенды, если у кого-то есть на это время и силы. Только насколько я понимаю там и так нужно реализовать абстракции из мира зукипера в другой системе.
-
По поводу zetcd. Он может работать (хоть и неэффективно). Сейчас не работает, потому что присылает неожиданный ответ на multi транзакцию. Исправить будет легко (можно как на стороне zetcd, так и на стороне ClickHouse).
-
похоже на правду, cc @proller @milovidov_an
-
перетащу в кодовую базу
-
Ну, не очень то он и обобщенный, очень много ZK зависимого, вот пример https://github.com/yandex/ClickHouse/blob/a0d8743c4c1249f1e2394c6eb47bbbfcc83c502d/dbms/src/Storages/MergeTree/ReplicatedMergeTreeBlockOutputStream.cpp#L63 . И как раз чтоб реализовывать функциональность в других бекендах нудно бы спрятать все эти выборы лидеров/кворум и т.д. за инерфейсyandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
zetcd посмотрю и поправлю если пробдема в multi )
-
-
в гитхабе есть иссуе про зетцд
-
И фикс вроде есть https://github.com/etcd-io/zetcd/pull/102Issue98fix by hokie228 · Pull Request #102 · etcd-io/zetcd
This fixes the encoding of a partial response to a multi-op request where one succeeds but another fails. The current implementation returns an error with no response, but Kafka expects Zookeeper ...
-
-
Привет!
Есть MariaDB 10.3, пробую установить clickhouse-mysql (https://github.com/Altinity/clickhouse-mysql-data-reader)
yum install -y clickhouse-mysql
Получаю ошибку:
Error: Package: clickhouse-mysql-0.0.20180319-1.noarch (Altinity_clickhouse)
Requires: mysql-community-devel
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
Не получится работать с MariaDB? -
Requires: mysql-community-devel
-
-
MariaDB = MySQL
-
yum install mysql-community-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.sale-dedic.com
* epel: ru.download.ispsystem.com
* extras: mirror.reconn.ru
* ispsystem-5.191: ru.download.ispsystem.com
* ispsystem-base: ru.download.ispsystem.com
* remi-php56: mirror.reconn.ru
* remi-safe: mirror.reconn.ru
* updates: centos.mirror.gnu.fi
Altinity_clickhouse/x86_64/signature | 833 B 00:00:00
Altinity_clickhouse/x86_64/signature | 1.0 kB 00:00:00 !!!
Altinity_clickhouse-source/signature | 836 B 00:00:00
Altinity_clickhouse-source/signature | 1.0 kB 00:00:00 !!!
No package mysql-community-devel available.
Error: Nothing to do -
Там по идее должно хватить mysql-devel, этот пакет установлен установлен:
yum install mysql-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.sale-dedic.com
* epel: ru.download.ispsystem.com
* extras: mirror.reconn.ru
* ispsystem-5.191: ru.download.ispsystem.com
* ispsystem-base: ru.download.ispsystem.com
* remi-php56: mirror.reconn.ru
* remi-safe: mirror.reconn.ru
* updates: centos.mirror.gnu.fi
Package MariaDB-devel-10.3.13-1.el7.centos.x86_64 already installed and latest version
Nothing to do
Но установщик хочет именно mysql-community-devel -
https://github.com/larsks/fakeprovide (погуглил для себя)larsks/fakeprovide
A tool for generating "fake" rpm packages to resolve otherwise intractable dependency issues. - larsks/fakeprovide
-
как раз для случая когда пакет есть, а вендор зафакапил его проверку, видимо
-
GitHub - Altinity/clickhouse-mysql-data-reader: utility to read mysql data
utility to read mysql data. Contribute to Altinity/clickhouse-mysql-data-reader development by creating an account on GitHub.
-
Хмм.. спасибо, буду пробовать, если не получится установить нужные зависимости.
-
https://github.com/Altinity/clickhouse-mysql-data-reader#pypi-installation
Следуйте пошагово, вы похоже не добавили нужные репы в систему...GitHub - Altinity/clickhouse-mysql-data-reader: utility to read mysql datautility to read mysql data. Contribute to Altinity/clickhouse-mysql-data-reader development by creating an account on GitHub.
-
А установка этого пакета не нарушит работу MariaDB?
-
-
Не должна. Вы же из марии будете копировать в КХ?
-
Да, просто этот пакет размещен на dev.mysql.com
-
Попробовал установить - не получилось, куча ошибок о конфликте:
Transaction check error:
file /usr/share/mysql/charsets/Index.xml from install of mysql-community-common-5.7.25-1.el7.x86_64 conflicts with file from package MariaDB-common-10.3.13-1.el7.centos.x86_64
file /usr/share/mysql/charsets/armscii8.xml from install of mysql-community-common-5.7.25-1.el7.x86_64 conflicts with file from package MariaDB-common-10.3.13-1.el7.centos.x86_6
.... -
можно ли из трейс логов убрать пароли/логины которые прилетают через JDBC подкключения и оставить план запроса?
-
+ хотел в моинторигне настроить сбор статистики по партициям, создал юзера для маониторинга без доступа в базкам. метрики оно собираает, только вот не видит записей в system.parts =( Давать доступ на базки для юзаера для мониторинга не хочется =(. Имеет ли смысл сабмитить импрувмент в git?
-
И вообще кто и что мониторит? Какие трешхолды ставите?
-
clickhouse-mysql.spec есть
-
Requires: mysql-community-devel
замени на mysql-compat-client -
./pack/clickhouse-mysql.spec (mysql-community-devel -> mysql-compat-client)
https://github.com/Altinity/clickhouse-mysql-data-reader#dev-installationGitHub - Altinity/clickhouse-mysql-data-reader: utility to read mysql datautility to read mysql data. Contribute to Altinity/clickhouse-mysql-data-reader development by creating an account on GitHub.
-
Такого пакета тоже нет:
yum install mysql-compat-client
...
No package mysql-compat-client available.
Error: Nothing to do
Но я уже сделал замену mysql-community-devel на mysql-devel и установил вручную, сервис установился, но запустить пока что не получилось.
#service clickhouse-mysql start
Starting clickhouse-mysql
Traceback (most recent call last):
File "/usr/bin/clickhouse-mysql", line 6, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python3.4/site-packages/pkg_resources/__init__.py", line 3095, in <module>
@_call_aside
File "/usr/lib/python3.4/site-packages/pkg_resources/__init__.py", line 3079, in _call_aside
f(*args, **kwargs)
File "/usr/lib/python3.4/site-packages/pkg_resources/__init__.py", line 3108, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/usr/lib/python3.4/site-packages/pkg_resources/__init__.py", line 570, in _build_master
ws.require(__requires__)
File "/usr/lib/python3.4/site-packages/pkg_resources/__init__.py", line 888, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python3.4/site-packages/pkg_resources/__init__.py", line 774, in resolve
raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'mysqlclient' distribution was not found and is required by clickhouse-mysql
/
ERROR: unable to start clickhouse-mysql
Check log file(s)
/var/log/clickhouse-mysql/clickhouse-mysql.log
А при попытке установить mysqlclient:
Command "/usr/bin/python3.4 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-bd6uicmz/mysqlclient/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-lddqwqq2/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-bd6uicmz/mysqlclient/ -
-
-
@ldviolet помог решить вопрос в ЛС, достаточно было установить python34-mysql (пакет mysqlclient подтянется автоматически)
В итоге:
1. Установил clickhouse-mysql-data-reader по этой инстркции https://github.com/Altinity/clickhouse-mysql-data-reader#dev-installation
Обратите внимание! Перед установкой нужно вручную подправить зависимости (mysql-community-devel -> mysql-devel)
https://github.com/Altinity/clickhouse-mysql-data-reader/blob/57934187175822bddc0800eda47322d5efc4f2ff/pack/clickhouse-mysql.spec#L24
2. После установки вручную установил пакеты:
yum install python-devel
yum install python34-mysql
3. Profit
Всем спасибо за помощь! :)GitHub - Altinity/clickhouse-mysql-data-reader: utility to read mysql datautility to read mysql data. Contribute to Altinity/clickhouse-mysql-data-reader development by creating an account on GitHub.
-
-
- 09 March 2019 (41 messages)
-
Вот тут:
https://github.com/yandex/ClickHouse/issues/777#issuecomment-382612686
Unexpected op_num received at the end of results for multi transaction (Marshalling error)
Посмотрите функцию ZooKeeperMultiResponse::readImpl - что она ожидает, что отвечает ZooKeeper и что отвечает zetcd.clickhouse core dumped when try work over zetcd · Issue #777 · yandex/ClickHousei create repo https://github.com/Slach/clickhouse-zetcd for reproducing stand clickhouse + zetcd latest clickhouse Dockerimage core dumped after run following query sudo docker-compose run clickhou...
-
Пример того, что отвечает ZooKeeper приведён наверху в комментарии
Example of multi response -
Спасибо
-
-
Да, довольно сильно. Если сильно крупные партии сделать - то будет много лишних данных сканировать (если конечно по первичному индексу не заузит выборку). Если слишком мелкие - то будет слишком много файлов/каталогов и файловая система начнет жутко тормозить.
-
Обычно id счетчика лучше добавлять не в ключ партиционирования, а на первом месте в первичном ключе
-
-
Ребята, по скрину подскажите пожалуйста что за тулза
-
-
VKCOM/lighthouse
Lightweight interface for ClickHouse. Contribute to VKCOM/lighthouse development by creating an account on GitHub.
-
Спасибо друг 👍
-
@xboston
Фалькон ещё контрибьютишь? -
Опа =)
Не, давно уже нет -
:)
-
Только я не понимаю, почему при вопросах с фастхттп не написали команде фастхттп, а сделали костыль? 😁
-
Не подскажете, команда fasthttp это кто :)?
-
Я так сделал, потому что сначала решил попробовать доработать fasthttp, чтобы добавить туда поддержку стримов, увидел, что там очень много работы, и, поскольку основной задачей было уменьшить расход памяти, сделал костыль, о чем честно рассказал. Патчить fasthttp было бы намного затратнее по ресурсам, хотя я так изначально и планировал
-
Например, я 🙂
-
-
Исторически, у нас же буферизация тоже не просто так была сделана — это помогает в TFB, где небольшой хттп пайплайн, но можно придумать опцию, чтобы её убирать и стримить чаще наружу. Плюс я недавно сделал опцию, которая позволяет сэкономить тонну горутин и памяти — просто оставляет соединение после hijack открытым, а значит ты можешь пихнуть соединение в epoll или ещё что-то такое, а из хендлера просто выйти)
-
Тут развернуться можно)
-
Я не помню деталей сейчас, если честно, но вроде у вас есть тикет про то, что хорошо бы добавить возможность стримить тело запроса, как и тело ответа тоже. Потому что в моем случае как раз большие ответы и большие тела запросов это не редкость :)
-
По-моему уже давно нет 🙃
-
А не подскажете тогда, как мне в fasthttp стримить ответ пользователю вместо буферизации? Мне по сути в этом месте нужно проксирование через fasthttp без буферизации.
-
Я вижу как минимум этот issue: https://github.com/valyala/fasthttp/issues/411 , и он до сих пор открыт.Reponse body io.Reader · Issue #411 · valyala/fasthttp
Hey guys. How to set custom response body writer? I've tried to use SetBodyStream, but i don't see any body readers from response which i need to pass in io.Reader. P.S I'm ...
-
Там вопрос о чтении response, а не о записи)
-
Для проксирования мне нужно и то и другое 🙂
-
Я сейчас не у ноута, как буду опять у него — подскажу
-
Спасибо
-
А, у вас же прокся, точно
Можно будет и попатчить по пути фаст, сделать опцию на эту тему -
Господа, товарищи, появился вопрос - сейчас играюсь с materialized view (Summing) поверх исходной mergeTree таблицы, и обнаружил, что если в исходной таблице провести мутацию, то это не отражается во вью.
В связи с этим вопрос: это я что-то не так делаю, или это так и задумано или это еще не доделано? Если последнее, то когда можно ожидать, что будет доделано?
Заранее благодарен за внимание и ответ. -
yandex/ClickHouse was tagged: v19.4.0.49-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.4.0.49-stable
Release notes:
v19.4.0.49-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Спасибо, попробую эту версию
-
Это бот, он просто сказал о новой версии)
-
Аа)
-
Не обратил внимание на автора поста). Думал, что кто-то просто очень немногословен
-
В общем случае невозможно "поправить" данные в матвью при мутации в оригинальной таблице. Поэтому нет и не предвидится. Запускайте ещё одну мутацию на матвью вручную.
-
Понятно. Хотя вроде даже и очевидно, что нельзя - матвью как правило содержит агрегаты над исходной таблицей, и как исходная мутация должна сказаться на этом произвольном селекте, совсем не очевидно...
-
тут на днях было хорошее объяснение откуда и когда матвью берёт данные.
было сказано, что берет из буфера при вставке.
Отсюда сразу логически вытекает, что все остальные процессы, КРОМЕ вставки в таблицу - на матвью не действуют -
то что внутренняя таблица хранящая данные MV никак не связана с оригинальной таблицей -- это преимущество.
плюшки:
* можно писать в одну MV из нескольких таблиц
* можно хранить данные в MV вечно, а в оригинальной таблице -- короткий срок
* можно не хранить данные в оригинальной таблице (engine = null)
* можно хранить данные данные в MV на другой ноде
* можно сделать нешардированное MV над шардированной таблицей (убер фича!!! маленькие агрегаты можно читать на любой ноде)
* можно шардировать данные MV по другому ключу шардирования -
Да, я понимаю. MV - это как полноценная таблица, наполняющаяся через insert trigger в род. таблице, который содержит в себе наш кастомный селект. Это если проводить аналогию с обычными БД
- 10 March 2019 (23 messages)
-
Только ваш кастомный селект будет применен не в родительской таблице, а ровно к тем данным что вы вставляете
-
Можно заинсертить имеющиеся данные если указать POPULATE при создании MV: https://clickhouse.yandex/docs/en/query_language/create/#create-view
-
Можно, но неудобно. Если исходных данных много, то будет долго и идущие в фоне инсерты не попадут в MV ЕМНИП. УДобнее просто создать без POPULATE и ручками сделать backfill, вставляя нужные данные с помощью INSERT ... SELECT.
-
А инсерт тоже можно сделать? Не знал. Тогда вообще замечательно
-
Имхо удобнее всего создавать матвью в существующую таблицу (синтаксис `CREATE MATERIALIZED VIEW ... TO ...`). Тогда все очень понятно кто и куда и что копирует. И никаких "непонятных" .inner таблиц.
-
плюшки:
* можно писать в одну MV из
нескольких таблиц
Увы, но писать можно только в таблицу, в которую грузит мат представление, но вы не сможете объеденить несколько таблиц на этапе подготовки данных, к сожалению. -
Joined.
-
Joined.
-
-
я про https://gist.github.com/den-crane/005633470c70877dd28c00211cd9fcfb
create materialized view MVA to storeABC as select A ABC from tableA;
create materialized view MVB to storeABC as select B ABC from tableB;
create materialized view MVC to storeABC as select C ABC from tableC; -
"Писать в одну MV" для МЕНЯ значит:
create mat. view xxx as
select * from tab1
join tab2 on tab1.id=tab2.id_code; -
Довольно сложный механизм... на мой взгляд, конечно.
-
Ну естественно в этом случае работает только при вставке в левую таблицу.
Оно же просто по памяти будет падать если сделать и для правой (например сделать еще одну MV в которой написать таблицы наоборот). -
Давайте начнем с того, что для КХ это просто невозможно.
-
@den_crane Давайте перестанем натягивать одежды реляционных СУБД на КХ.
-
это возможно, просто нафиг не нужно
create table tableL (A String, L String) Engine=MergeTree order by tuple();
create table tableR (A String, R String) Engine=MergeTree order by tuple();
create table storeLR(A String, L String, R String) Engine=MergeTree order by tuple();
create materialized view MVL to storeLR as select A,L,R from tableL join tableR using A;
create materialized view MVR to storeLR as select A,L,R from tableR join tableL using A;
insert into tableL values('A', 'A');
insert into tableR values('A', 'B');
insert into tableL values('A', 'C');
insert into tableR values('A', 'D');
select * from storeLR
┌─A─┬─L─┬─R─┐
│ A │ A │ B │
│ A │ C │ B │
│ A │ C │ D │
│ A │ A │ D │
└───┴───┴───┘ -
Здорово! И зачем предлагает его как рабочее средство решения проблем и тем более называть это "плюшкой"?
-
Плюшка это что-то приятное и полезное.
-
вы неправильно меня поняли, плюшкой я назвал возможность 'union all'
create materialized view MVA to storeABC as select A ABC from tableA;
create materialized view MVB to storeABC as select B ABC from tableB;
create materialized view MVC to storeABC as select C ABC from tableC;
и я этим пользуюсь, например в ОДНО summing MV кладутся данные, которые вырастают и абсолютно разных таблиц, с разной структурой. -
Mea culpa. Вероятно, это у меня не верное восприятие.
-
Любопытная фича. Спасибо за наводку
-
-
- 11 March 2019 (235 messages)
-
-
В основном таймсериес
-
Вместо постгреса можно любую скл базу вписать часто
-
-
-
Joined.
-
Joined.
-
Всем привет!
Подскажите пожалуйста, будет ли автоматический решардинг, если да то в каком обозримом желательно будущем?
Спасибо! -
а зачем он ? у вас же ноды не динамически появляются, а без этого у вас и так данные будут равномерно распределены
-
а при добавлении новых можно руками запустить решардинг
-
если очень надо просто в деплой сервера встройте запуск решардинга сами, это буквально две строчки кода
-
А как вы делаете решардинг?
-
у меня оно само делается так как старые данные чистятся
-
а так кх копир же есть для этого
-
всем привет! Подскажите пожалуйста в каких случаях при джойне двух таблиц кх возвращае 0 вместо поля, по которому делается джоин? я так понял вроде так он джойнит все null значения?
-
Может сможет кто сходу подсказать по репликации
3 виртуалки, на каждой кликхаус и зуукипер, по статусам все работает, конфиги прописаны
а репликация не работает, в логах зуукпипера записи похожи на правду
раньше работало, сейчас только шард и реплику через макрос добавил
куда копать? ) -
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/ch_log', '{replica}') PARTITION BY toYYYYMM(created_at)
-
в чём заключается неработа и что по этому поводу в логах?
-
в реплику 1 добавляешь запись, в реплику 2 не добавляется
-
какие логи посмотреть?
-
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.5.4-beta/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower -
логи кх их там всего два
-
а ну тут очевидно что вы подняли свой зукипер для каждого кх , откуда они должны тогда знать о друг друге , дорогой друг магии не существует, эфира тоже
-
там через hosts прописано, но вижу зацепку
-
что через хостс прописано ? все зукиперы должны быть в одном кластере
-
разбираемся, проблема немного в другом, скажу потом
-
никто не сталкивался с подобной проблемой? https://github.com/yandex/ClickHouse/issues/4533How could i extract the values of nested json object from kafka? · Issue #4533 · yandex/ClickHouse
I have json message in kafka: { "trace_id":"", "time":"", "properties":{ "device_id":"", "othercol":"" } } ...
-
А можно линк на доку?
-
ну в гугле documentation clickhouse
-
2019.03.11 08:16:34.224073 [ 10 ] {} <Error> us_prod.ch_log (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Host not found: ….
обращется не туда что выдает hostname -f и interserver_http_host пока что -
дайте нормальные имена
-
вобщем ощущение что не подхватывает hostname -f и interserver_http_host
прописал в hosts то что он ищет и заработало -
берет старое значение
-
-
-
Они уже сжаты
-
У меня - примерно 4:1 сжатие по сравнению с сырыми данными.
-
Дополнительное сжатие может и даст пару процентов, но это маловероятно.
-
-
Того не стоит, разве чтоб одним архивом было
-
Для этого есть tar 🙂
К тому же, встроенный в эту утилиту: https://github.com/AlexAkulov/clickhouse-backupGitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages supportTool for easy ClickHouse backup and restore with cloud storages support - GitHub - AlexAkulov/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support
-
Там уже добавили поддержку архивирования7
-
Вижу что добавили.
-
Add archive strategy by ssfilatov · Pull Request #2 · AlexAkulov/clickhouse-backup
Add strategy which creates a single backup tarball and uploads it to s3
-
А подскажите, по какому принципу работает эта стратегия? Не совсем понимаю значения данных свойств:
overwrite_strategy: "always"
part_size: 5242880
и
backup:
strategy: tree
backups_to_keep: 0 -
Всем привет! Словил странное поведение КХ
select count() from action_distributed where date = '2019-03-10' and toHour(dateTime) = 1 and toMinute(dateTime) = 51 format Vertical
SELECT count()
FROM action_distributed
WHERE (date = '2019-03-10') AND (toHour(dateTime) = 1) AND (toMinute(dateTime) = 51)
FORMAT Vertical
Row 1:
──────
count(): 3294
1 rows in set. Elapsed: 0.027 sec. Processed 2.54 million rows, 10.58 MB (92.94 million rows/s., 386.41 MB/s.)
----------------------------------------------------
select count() from action_distributed where date = '2019-03-10' and dateTime >= '2019-03-10 01:50:00' and dateTime < '2019-03-10 02:00:00' format Vertical
SELECT count()
FROM action_distributed
WHERE (date = '2019-03-10') AND (dateTime >= '2019-03-10 01:50:00') AND (dateTime < '2019-03-10 02:00:00')
FORMAT Vertical
Row 1:
──────
count(): 0
1 rows in set. Elapsed: 0.019 sec. Processed 2.54 million rows, 14.74 MB (135.80 million rows/s., 786.73 MB/s.)
В чем может быть проблема?
ClickHouse server version 19.1.6 revision 54413 -
Добрый день, ставил ли кто-то clickhouse из https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/ ?
Очень смущает Transaction check error:
file / from install of clickhouse-client-19.4.0-2.noarch conflicts with file from package filesystem-3.2-25.el7.x86_64 -
-
Всем привет, а я застрял на этапе установки - в настоящий момент пытаюсь перенести данные на SMB хранилище. в результате storage подмантировал как /mnt/smb, выставляю права: chown clickhouse:clickhouse /mnt/smb/clickhouse/, далее в конфиге правлю раздел: <!-- Path to data directory, with trailing slash. -->
<path>/mnt/smb/clickhouse/</path> но, не взлетает 🙁 Что я упустил? -
Joined.
-
Joined.
-
Упустили посмотреть в логи
-
Логов нет, я перед запуском потер оба лога, и они заного не создались
-
Попробуйте заново создать сами файлы логов, может оно не может создавать само
-
Что-то в /var/log/messages есть?
-
Что-то поменялось, теперь лог сгенерировался: Effective user of the process (clickhouse) does not match the owner of the data (root). - буду биться с правами. при том, что рекурсивно уже нужные выставлял. Главное, что нет иных подводных камней.
-
-
Всем привет! Подскажите, пожалуйста, есть ли какие-либо альтернативы движку Kafka для буферизированного стриминга в Clickhouse?
-
Конфиг с 3мя шардами.
Блок конфига выглядит так:
<remote_servers>
<!-- Two shards, two replica -->
<pulse>
<!-- shard 01 -->
<shard>
<!-- replica 01_01 -->
<replica>
<host>mark-core01</host>
<port>9000</port>
</replica>
<!-- replica 01_02 -->
<replica>
<host>mark-core03</host>
<port>9000</port>
</replica>
</shard>
<!-- shard 02 -->
<shard>
<!-- replica 02_01 -->
<replica>
<host>mark-core04</host>
<port>9000</port>
</replica>
<!-- replica 02_02 -->
<replica>
<host>mark-core05</host>
<port>9000</port>
</replica>
</shard>
</pulse>
<pulse_shard_1>
<!-- shard 01 -->
<shard>
<!-- replica 01_01 -->
<replica>
<host>mark-core01</host>
<port>9000</port>
</replica>
<!-- replica 01_02 -->
<replica>
<host>mark-core03</host>
<port>9000</port>
</replica>
</shard>
</pulse_shard_1>
<pulse_shard_2>
<!-- shard 02 -->
<shard>
<!-- replica 02_01 -->
<replica>
<host>mark-core04</host>
<port>9000</port>
</replica>
<!-- replica 02_02 -->
<replica>
<host>mark-core05</host>
<port>9000</port>
</replica>
</shard>
</pulse_shard_2>
</remote_servers>
В логе
2019.03.11 14:13:09.827829 [ 1 ] {} <Error> Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/test//test.sql, error: DB::Exception: No macro shard in config, stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x5d9fdc6]
1. clickhouse-server(DB::Macros::expand(std::string const&, unsigned long, std::string const&, std::string const&) const+0x6bc) [0x5d96f3c]
2. clickhouse-server(DB::Macros::expand(std::string const&, std::string const&, std::string const&) const+0x19) [0x5d97079]
3. clickhouse-server(DB::StorageReplicatedMergeTree::StorageReplicatedMergeTree(std::string const&, std::string const&, bool, std::string const&, std::string const&, std::string const&, DB::ColumnsDescription const&, DB::IndicesDescription const&, DB::Context&, std::string const&, std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::IAST> const&, DB::MergeTreeData::MergingParams const&, DB::MergeTreeSettings const&, bool)+0x2c2) [0x5697b72]
4. clickhouse-server() [0x57cec27]
5. clickhouse-server(std::_Function_handler<std::shared_ptr<DB::IStorage> (DB::StorageFactory::Arguments const&), std::shared_ptr<DB::IStorage> (*)(DB::StorageFactory::Arguments const&)>::_M_invoke(std::_Any_data const&, DB::StorageFactory::Arguments const&)+0x14) [0x57d0c74]
6. clickhouse-server(DB::StorageFactory::get(DB::ASTCreateQuery&, std::string const&, std::string const&, std::string const&, DB::Context&, DB::Context&, DB::ColumnsDescription const&, bool, bool) const+0x1a3) [0x56407e3]
7. clickhouse-server(DB::createTableFromDefinition(std::string const&, std::string const&, std::string const&, DB::Context&, bool, std::string const&)+0xfd) [0x53f81dd]
8. clickhouse-server() [0x5910213]
9. clickhouse-server() [0x5910916]
10. clickhouse-server() [0x5da6179]
11. clickhouse-server(ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::_List_iterator<ThreadFromGlobalPool>)+0x199) [0x5daaa39] -
12. clickhouse-server(ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::function<void ()>, int, std::optional<unsigned long>)::{lambda()#3}>(void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::function<void ()>, int, std::optional<unsigned long>)::{lambda()#3}&&)::{lambda()#1}::operator()() const+0x28) [0x5daafd8]
13. clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x199) [0x5da8a79]
14. clickhouse-server() [0x65ce82f]
15. /lib64/libpthread.so.0(+0x7e25) [0x7f3bffc05e25]
16. /lib64/libc.so.6(clone+0x6d) [0x7f3bff425bad]
В консоли
[developer@mark-core04 ~]$ sudo service clickhouse-server start
Start clickhouse-server service: Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
UNKNOWN -
-
-
-
-
мне не нравятся слеши
-
а тогда почему на 2 нормально, а на двух плохо ???
-
в душе не знаю
-
-
просто мне не нравятся эти слеши
-
это выглядит как ошибка
-
-
не знаю правда
-
прости чувак, я мимокрокодил, взгляд зацепился
-
мб и не в этом дело
-
2019.03.11 11:07:05.189458 [ 51 ] {dde7484c-fa6d-445a-b6d8-ad94d30fc5bd} <Error> executeQuery: Code: 368, e.displayText() = DB::Exception: Bad cast from type DB::ColumnVector<unsigned long> to DB::ColumnVector<unsigned int> (from [::1]:39546) (in query: INSERT INTO tbl FORMAT Native), Stack trace:
понятна суть ошибки, но не понятно почему - таблицы по структуре одинаковые -
-
<macros>
<shard>shard-1</shard>
<replica>replica-11</replica>
</macros> -
не понял тогда, почему на 2 машинах работает, а на 2 - нет
-
No macro shard in config
-
проверь конфиг на 2-х машинах
-
tree стратегия синкает папку shadow с s3
archive превращает все в tar
backups_to_keep определяет сколько бэкапов держать в s3 для архивной стратегии
part_size - опция aws sdk для мультапарт аплоада -
-
ну я сказал рабочий вариант
-
все равно не понятно. Ну имя шарда - ладно, они разные, а имя реплики?
-
шард один как раз, а реплики - по названию виртуалок
-
-
-
надо добавить этот модуль в конфиг и разобраться с названиями и схемой репликации
-
проблема мне кажется что кликхаус не видет этот конфиг
-
Примерно таких хитростей и ожидал: все решилось указанием dir_mode=0777,file_mode=0777 в параметрах монтирования
-
Сергей, подскажите, эта утилита ротирует бекапы в директории /var/lib/clickhouse/shadow или нужно с самому очищать?
-
нужно очищать используя clickhouse-backup clean
-
Еще интереснее. Убрал блок remote_servers совсем. Ошибка осталась
-
Спасисбо! Просто в README этой информации не заметил.
-
наверно потому что в схеме таблицы макросы
-
-
всегда так было -- это баг (чинят), просто еще раз достаньте поле через алиас (select a, a as r_a from...) r on (r.a =
-
ок, спасибо!
-
freeze будет по всем partition и если в shadow уже были данные, то появятся новые хард линки. на данный момент мы запретили в clickhouse-backup фриз при непустом shadow
-
-
-
а Вы проверили дату в datetime поле в 3294 записях? Там точно 03-10 ?
https://github.com/yandex/ClickHouse/issues/4312 -
Там 03-10
select dateTime from action_distributed where date = '2019-03-10' and toHour(dateTime) = 1 and toMinute(dateTime) = 51 limit 5 format Vertical
SELECT dateTime
FROM action_distributed
WHERE (date = '2019-03-10') AND (toHour(dateTime) = 1) AND (toMinute(dateTime) = 51)
LIMIT 5
FORMAT Vertical
Row 1:
──────
dateTime: 2019-03-10 01:51:49
Row 2:
──────
dateTime: 2019-03-10 01:51:26
Row 3:
──────
dateTime: 2019-03-10 01:51:57
Row 4:
──────
dateTime: 2019-03-10 01:51:22
Row 5:
──────
dateTime: 2019-03-10 01:51:37
5 rows in set. Elapsed: 0.015 sec. Processed 585.97 thousand rows, 2.39 MB (39.55 million rows/s., 161.29 MB/s.) -
А если
Set compile_expressions=0
Перед вторым запросом? -
все равно 0
-
и еще как раз в это время переводили время в сев.ам.
-
А datetime входит в индекс? И какая tz на сервере?
-
-
dateTime не входит в индекс. Время в UTC.
Еще заметил одну особенность. За 10 число нет записей за 02H, при этом за 01H их где-то в два раза больше, чем должно быть. Получается как будто 01 и 02 “схлопнулись” в 01
select toHour(dateTime), count() from action_distributed where date = '2019-03-10' and toHour(dateTime) IN (0,1,2,3,4) group by toHour(dateTime) format Vertical
SELECT
toHour(dateTime),
count()
FROM action_distributed
WHERE (date = '2019-03-10') AND (toHour(dateTime) IN (0, 1, 2, 3, 4))
GROUP BY toHour(dateTime)
FORMAT Vertical
Row 1:
──────
toHour(dateTime): 0
count(): 89545
Row 2:
──────
toHour(dateTime): 1
count(): 199529
Row 3:
──────
toHour(dateTime): 3
count(): 100281
Row 4:
──────
toHour(dateTime): 4
count(): 100169
4 rows in set. Elapsed: 0.021 sec. Processed 2.54 million rows, 11.16 MB (119.70 million rows/s., 525.11 MB/s.) -
Есть куча компьютеров рабочих которые выходят в сеть. Нужна аналитика какие сайты посещают сколько времени сидят и ТД. Пересечения и прочее. Данные о всех пакетах хранятся в одной таблице более 1000 компьютеров все тормозит при запросах в которых идёт агрегация. AgregationMergeTree решит проблему?
-
Ну понятно что из-за перехода на летнее время. Непонятно почему toHour в вашем случае это делает.
-
разве был переход на летнее время?)
-
Ну, например, в США был как раз в эти выходные переход на летнее время :)
-
спасибо, не знал)
-
может подскажите ещё, можно ли быкапить с учетом нескольких шардов - в конфиге в блоке s3 добавляете вручную имя шарда в path?
И может я упустил, но нельзя получается бэкапить если КХ версии, когда нельзя всю таблицу разом фризить, а только партами? -
фризится каждый партишн независимо.
утилита ничего не знает про шарды, поэтому на каждом сервере надо настраивать запуск. чтобы данные не смешивались, можно разные path задать. то есть в разных папках будут -
-
-
При текущем подходе к шардированию в ClickHouse, довольно тяжело перенести только нужные данные на другие шарды — сейчас обычно требуется полное чтение всего содержимого, хотя, если есть сэмплирование, то это не обязательно. Автоматически сейчас это сделать не получится, но можно использовать clickhouse-copier. Насколько я знаю (я не разработчик ClickHouse), лишь в отдаленных планах есть желание сделать «микрошарды», когда данные будут разбиты на более мелкие части, что облегчило бы и решардинг и поддержание нужного фактора репликации при выходе из строя одной из нод (сейчас когда одна реплика выходит из строя, для её полного восстановления создается очень высокая нагрузка на оставшийся шард, что довольно плохо сказывается на работе кластера :).
-
я запускаю фриз, он пишет про каждый парт без ошибок, но в папке shadow только increment.txt. ПРичем он явно создаётся при запуске бэкапа.
Пока запускаю tree -
а данные есть точно? или просто пустые таблицы?
-
данные есть ~22к строчек
-
-
сорян, пропустил это сообщение
-
т.е. скорее всего внутри КХ кривая таблица конвертации unixtime в строки. Попробую воспроизвести.
У вас докер ? clickhouse-client прямо на сервере? -
надо вручную позапускать то, что здесь делается
https://github.com/AlexAkulov/clickhouse-backup/blob/master/clickhouse.go#L113
может сразу станет понятно, что не такAlexAkulov/clickhouse-backupTool for easy ClickHouse backup and restore with S3 support - AlexAkulov/clickhouse-backup
-
докера нет, clickhouse-client прямо на сервере
-
Joined.
-
Всем привет! Подскажите, появилась ли возможность использовать конструкцию подобную "ROW_NUMBER() OVER(PARTITION BY)"?
-
При создании бэкапа используется значение partition_id, который отличается от partition (наследие). Кликхаус при фризе не ругается и отвечает OK, но бэкап не создаёт.
┌─partition────┬─partition_id─┐
│ '2019-02-02' │ 20190202 │ -
значит не учтен момент. а не затруднит issue создать? посмотрим как только сможем
-
-
с ходу не воспроизводится, а без дистрибьютид action_distributed, на локальной таблице тоже лажа?
-
нет (используем пока массивы и groupArray или limit by если надо отсечь по номеру)
-
ага
-
Как можно перенести данные из одной директории в другую?
просто перенести всю папку /var/lib/clickhouse и потом изменить путь в конфиге не помогло -
Спасибо
-
какие ошибки?
-
-
при запуске сервиса
-
ну логи будут явно более полезны
-
в логах пустота в этот момент, я так понимаю, что процесс не запускался и логи не писались
-
ну есть еще сислог, в нем может быть инфа
-
сейчас поищу
-
-
я нашел только err.log
-
там нет ничего
-
ось какая на сервере?
-
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial -
-
-
-
-
-
-
вся таблица -- IOT ( отсортирована по order by) , и можно создавать skip index-ы (т.е. обычных btree -- вторичных, нет)
-
скорее всего ошибка в стратегии партиционирования -- слишком много партиций
-
В доке увидел что есть дополнительные индексы
-
-
/var/log/syslog смотреть в момомент запуска
-
спасибо, сейчас
-
да но skip
-
Mar 11 15:57:36 db6 clickhouse-server[22613]: Poco::Exception. Code: 1000, e.code() = 13, e.displayText() = Access to file denied: /var/lib/clickhouse, e.what() = Access to file denied
-
ну просто на новое местоположение надо сделать chown clickhouse:clickhouse
если установка была из пакета -
сделали
-
и показывал он там юзера
-
а данные лежат точно в /var/lib/clickhouse ?
-
сначала была ссылка на новое место
-
потом я в конфигах перенес
-
Mar 11 15:50:51 db6 clickhouse-server[16549]: Poco::Exception. Code: 1000, e.code() = 13, e.displayText() = Access to file denied: /var/lib/postgresql/clickhouse, e.what() = Access to file denied
-
не обращай внимания на postgresql, там просто диск замапан ssd
-
/var/lib/postgresql/ chown'или?
-
а можно навесить на таблицу с залитыми данными ?
-
Да походу вы правы, а не подскажите а можно ли просто удалить папку clickhouse/data/problem_db
-
на clickhouse
-
покажите вывод этих 3х команд
ls -la /var/lib/ | grep postgresql
ls -la /var/lib/postgresql/
ls -la /var/lib/postgresql/clickhouse -
ну clickhouse я уже mv назад сделал
-
-
-
но на него был clickhouse clickhouse
-
ls -la /var/lib/ | grep postgresql показывает что сейчас он принадлежит postgres.
В таком состоянии CH имеет полное право не стартовать)
А что там было, мы уже видимо не узнаем -
SELECT visitParamExtractRaw('{"p1":"79263"}', 'p1')
┌─visitParamExtractRaw('{"p1":"79263"}', 'p1')─┐
│ "79263" │
└──────────────────────────────────────────────┘ -
Joined.
-
спасибо за уточнение
-
скорей всего так и есть
-
а где указывается поле? мне по полю нужно искать, а не по заданной строке
-
SELECT visitParamExtractRaw(params, 'p1')
-
тогда где указывать искомое значение?
как указано в документации я попробовал https://clickhouse.yandex/docs/ru/query_language/functions/json_functions/
может тип поля должен быть другой? сейчас params это String -
можно, но вам не поможет.
create table BX(I Int64, S String) Engine=MergeTree order by I;
insert into BX select number, toString(rand()) from numbers(10000000);
ALTER TABLE BX ADD INDEX idx0 S TYPE minmax GRANULARITY 10;
optimize table BX final;
select count() from BX prewhere S = '666';
0 rows in set. Processed 10.00 million rows,
select count() from BX prewhere S = 'A';
0 rows in set. Elapsed: 0.001 sec. -
усвоил, спасибо
-
Спасибо за совет. удалил папку с проблемной таблицей, все завелось
-
-
-
за диапазон 3 дня, будет X партов VS X*(~3) партов, в синтетических тестах я получал разницу на 0.1%
-
ого, настолько незначительное отличие? т.е линейный рост, и допустим при выборке за месяц, при партиционировании по дням деградация будет в пределах 3%🤔
-
-
Добрый вечер!
Столкнулся с такой проблемой…. Мне хочется сделать что-то вроде array join на nested структуру, развернув эти массивы в строки, но с одним НО, хочу при этом не терять те ситуации, когда NESTED структура пустая… То есть некоторый left array join:
SELECT count()
FROM t
ARRAY JOIN a
WHERE dt = yesterday()
1 rows in set. Elapsed: 0.170 sec. Processed 2.05 billion rows, 20.81 GB (12.04 billion rows/s., 122.07 GB/s.)
SELECT count()
FROM t
LEFT ARRAY JOIN a
WHERE dt = yesterday()
↙ Progress: 115.28 million rows, 1.17 GB (22.54 million rows/s., 228.55 MB/s.)
Скорость падает больше чем на 2 порядка. Может я неправильно понимаю, что делает left array join и есть какая-то правильная функция для такой задачи? -
вы протестируйте на своих запросах и реальных данных, я например не проверял на таблицах из запросах с сотнями колонок.
Может вам недельные партиции подойдут.
Зачем изначально было выбрано патриционирование по дням?
Сколько лет вы собираетесь хранить, потому что 1825 партиций vs 60 партиций за 5 лет. -
а с emptyArrayToSingle тоже на два порядка?
типа
SELECT count()
from (select a FROM t WHERE dt = yesterday()) ARRAY JOIN a
SELECT count()
FROM (select a FROM t WHERE dt = yesterday()) LEFT ARRAY JOIN a
SELECT count()
from (select emptyArrayToSingle(a) FROM t WHERE dt = yesterday()) ARRAY JOIN a -
Подскажите. По http передаю массив строк . Нужно каждый элемент массива в кавычки ? [Ffff,cgg] или ['fff','ggg']. Где прочесть про это ?
-
и без http тоже нужны кавычки. Вы же передаете post-м файл, все тоже самое что и для client
select ['aaaa','bbb'] format TSV
select ['aaaa','bbb'] format Values
select ['aaaa','bbb'] format JSONEachRow -
А если числа ?
-
select [6,5] format TSV
[6,5] -
по скорости выглядит так же и есть ощущение, что left array join это и делает
-
Делаю all inner join двух талиц (КХ и mysql)
argMax(t1.url, event_time) AS url, вот так работает t1 - это кх таблица
argMax(t2.url, event_time) AS url, так не работает t2 -это mysql данные
сервер падает
18.14.18 revision 54409.
и такая фигня именно на строках
Либо версия старая либо баг -
argMax(assumeNotNull (t2.url) , event_time)
падает? -
а как можно протестить на боевых данных без пересоздания таблицы с партиционированием по месяцу?
изначально по дням было выбрано по причине что возможны ситуации когда нужно дропнуть блок и налить по новой, и из-за 1-2 дней не хочется переливать месяц. если из-за этого деградирует чтение несильно (как в вашем примере), то это устраивает, больше года не храним.
На самом деле вопрос возник в ситуации, когда MV поверх MT не дает профита, хотя предагрегаты схлопнуты, обходиться сильно меньше строк.. а MV тоже партиционируется по дням. Поэтому и возник вопрос насколько большой профит в чтении от обхода меньшего числа партиций. -
>На самом деле вопрос возник в ситуации
uniq-и в агрегате?
т.е. там могут быть проблемы из-за granularity и очень больших (блобов state-в) полей, и это решаемо
читайте отсюда t.me/clickhouse_ru/90514 -
в запросе на чтение нет..
-
-
Да, падает
-
Добрый вечер коллеги, подскажите пожалуйста, как составить запрос. В базу пишутся большие пачки данных, но не постоянно, а допустим 10 раз в сутки, по 30 минут. Хочется получить список этих интервалов(хотя бы начальное время). Пробовал через timeSlots, похоже, но не совсем.
-
-
можно попробовать сначала получить интервалы через runningDifference от времени. А затем фильтрануть по интервалам, определив, что такой «большой"
-
-
спасибо, то что нужно!
-
-
select a from t order by time limit 1 by user
не тоже самое? -
потрясающе
-
-
-
т.е. у вас в течение суток 10 блоков данных по полчаса и между ними перерывы? Простой select min(time) from table group by timeSlot(time) почему-то не работает?
-
т.е. он конечно вернет немного лишних строк, но отбросить их довольно просто.
-
да, много лишнего, вариант с runningDifference подошел идеально, спасибо за помощь
-
Joined.
-
Этот вариант тоже не такой уж быстрый получается
-
Добрый вечер. У меня возникла вот какая проблема с запуском CH в контейнере. CH ругается
chown: cannot access '': No such file or directory
clickhouse_1 | Couldn't save preprocessed config to /etc/clickhouse-server/config-preprocessed.xml: Access to file denied: /etc/clickhouse-server/config-preprocessed.xml -
использую офиц. образ
-
Кароч lasttest не завелся вообще
-
clickhouse:
image: yandex/clickhouse-server:18.10
user: root
ports:
- "8123:8123"
volumes:
- $PWD/volumes/clickhouse-data:/var/lib/clickhouse
- $PWD/volumes/logs/clickhouse:/var/log/clickhouse-server -
так все завелось
-
yandex/ClickHouse was tagged: v19.3.7-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.3.7-stable
Release notes:
v19.3.7-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Хорошо бы ещё видеть в ченджлоге, что нового появилось в этих версиях :)
-
А, простите, надо было changelog из ветки мастер смотреть, а не по ссылке
-
По крайней мере одно важное исправление: https://github.com/yandex/ClickHouse/pull/4623Fixed awful error after #3920 by alexey-milovidov · Pull Request #4623 · yandex/ClickHouse
Category (leave one): Bug Fix Short description (up to few sentences): Fixed error in #3920. This error manifestate itself as random cache corruption (messages Unknown codec family code, Cannot s...
- 12 March 2019 (156 messages)
-
Подскажите, где можно почитать отличия версий 19.1 19.2 и т.д. и почему ведётся несколько веток?
-
В ченджлоге
-
Недавно стали фиксы бекпортить, поэтому поддерживаются и старые версии.
-
-
Тут остается только проверять каждую новую версию, если у вас с ней проблем не будет значит она и есть ваша новая стабильная версия, других вариантов нет.
-
Почему табикс может не давать залогиниться, хотя:
1) те же креды подходят в нативном клиенте
2) нужный порт открыт, сервер на обычный гет отзывается, что живой на этом порте
3) схема указана (хотя пробовал и без нее)
4) в логах КХ ничего нет про неудачное подключение -
У меня не давал залогиниться бразузер, когда табикс - по https, а кх - по http
-
Ну или наоборот, не помню
-
-
Да. те же грабли.
-
в режиме разработчика браузера в консоле нет ошибок за mixed content?
-
-
-
Там пару дней назад Алексей поправил один из самых "эпичных" багов в версиях >=19.1 который был одной из главных причин нестабильности, и приводил к многочисленным падениям при использовании кэша. Попробуйте самые свежие версии. (>19.1.10, >19.3.6).
-
Если кто-то использует версии 19.1-19.1.10, 19.3-19.3.6, то думаю тоже имеет смысл обновиться.
-
Code: 33. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Cannot read all marks from file /var/lib/clickhouse/data/default/graphite/20181201_20181231_12537056_12537056_17/Path.mrk.
жаль, не пофиксился старый баг:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x6f72cd6]
1. clickhouse-server(DB::MergeTreeReaderStream::loadMarks()+0x17d7) [0x674c0a7]
2. clickhouse-server(DB::MergeTreeReaderStream::MergeTreeReaderStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::c
har_traits<char>, std::allocator<char> > const&, unsigned long, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, DB::MarkCache*, bool, DB::UncompressedCache*, unsigned long, unsig
ned long, unsigned long, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const&, int)+0x448) [0x674d068]
3. clickhouse-server() [0x6a8fd4d]
4. clickhouse-server(DB::MergeTreeReader::addStreams(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, std::function<void (DB::ReadBuffer
FromFileBase::ProfileInfo)> const&, int)+0xa9) [0x6a8dc49]
5. clickhouse-server(DB::MergeTreeReader::MergeTreeReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<DB::MergeTreeDataPart const> const&
, DB::NamesAndTypesList const&, DB::UncompressedCache*, DB::MarkCache*, bool, DB::MergeTreeData const&, std::vector<DB::MarkRange, std::allocator<DB::MarkRange> > const&, unsigned long, unsigned lo
ng, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, st
d::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, double> > > const&, std::function<void (DB::ReadBufferFromFileBase::ProfileInfo)> const
&, int)+0x3a9) [0x6a8f859]
6. clickhouse-server(DB::MergeTreeThreadSelectBlockInputStream::getNewTask()+0x7fb) [0x675df2b]
7. clickhouse-server(DB::MergeTreeBaseSelectBlockInputStream::readImpl()+0x42e) [0x6a87c7e]
8. clickhouse-server(DB::IBlockInputStream::read()+0x178) [0x62ed748]
9. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x68a9e6d]
10. clickhouse-server(DB::IBlockInputStream::read()+0x178) [0x62ed748]
11. clickhouse-server(DB::ParallelInputsProcessor<DB::ParallelAggregatingBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)+0x2e2) [0x68d5592]
12. clickhouse-server(ThreadFromGlobalPool::ThreadFromGlobalPool<DB::ParallelInputsProcessor<DB::ParallelAggregatingBlockInputStream::Handler>::process()::{lambda()#1}>(DB::ParallelInputsProcessor<
DB::ParallelAggregatingBlockInputStream::Handler>::process()::{lambda()#1}&&)::{lambda()#1}::operator()() const+0x71) [0x68d5f81]
13. clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x1ab) [0x6f78c6b]
14. clickhouse-server() [0xadeeb5f]
15. /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f892c455494]
16. /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7f892ba87acf] -
А на этот баг есть issue на гитхабе?
-
-
Спасибо, сейчас собрал 19.3.7 и гоняю тесты, пока все ок :)
-
-
Привет
Прочитал, что MergeTree можно указывать дополнительные индексы, используя allow_experimental_data_skipping_indices
(https://clickhouse.yandex/docs/ru/operations/table_engines/mergetree/#dopolnitelnye-indeksy-eksperimentalnyi-funktsional)
Пытаюсь сделать так:
CREATE TABLE stat.offers_log_daily
(
utc_date Date,
advertiser_application_id UInt64,
publisher_application_id UInt64,
creative_id UInt64,
...
INDEX creative_id (creative_id) TYPE set(1000) GRANULARITY 4
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(utc_date)
ORDER BY (advertiser_application_id)
SETTINGS index_granularity=8192;
Но не замечаю прироста производительности:
xxx.tech 🙂 select count(*) from offers_log_sharded;
SELECT count(*)
FROM offers_log_sharded
┌──count()─┐
│ 42314726 │
└──────────┘
1 rows in set. Elapsed: 0.022 sec. Processed 42.31 million rows, 42.31 MB (1.94 billion rows/s., 1.94 GB/s.)
xxx.tech 🙂 select count(*) from offers_log_sharded where creative_id = 14;
SELECT count(*)
FROM offers_log_sharded
WHERE creative_id = 14
┌─count()─┐
│ 24 │
└─────────┘
1 rows in set. Elapsed: 0.127 sec. Processed 42.31 million rows, 338.52 MB (332.30 million rows/s., 2.66 GB/s.) -
Кажется было бы логично попробовать сделать нормальный багрепорт с описанием того как вопроизвести этот баг, если вы хотите чтобы баг был подтвержден / исправлен.
-
А сколько (примерно) разных значений creative_id внутри подряд идущих 8К строк?
-
-
-
Тогда наверное использование этого индекса вряд ли вам будет полезным.
-
(Хотя могу ошибаться, пока не вникал как он огранизован)
-
-
Если я сделаю такую таблицу, то, (очевидно), запрос по creative_id будет быстрым.
CREATE TABLE stat.offers_log_daily
(
utc_date Date,
advertiser_application_id UInt64,
publisher_application_id UInt64,
creative_id UInt64,
...
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(utc_date)
ORDER BY (creative_id)
SETTINGS index_granularity=8192; -
угу
-
-
-
На такие вопросы нет "правильного" ответа. Если результат вас устраивает - значит подход верный, если нет - значит неверный :)
-
Первичный индекс - данные по нему отсортированы.
-
-
а по дополнительному индексу нет?
-
Для начала попробуйте просто ORDER BY (advertiser_application_id,creative_id)
-
При создании таблицы.
-
-
-
-
Почему несколько, на первый взгляд их должно быть 2-е
-
Доп. индекс - это не настроящий индекс, это просто какая-то вычисленная для каждого блока данных штуковина заглянув в которую можно решить "этот блок читать не будем".
-
-
CREATE TABLE stat
(
utc_date Date,
advertiser_application_id UInt64,
publisher_application_id UInt64,
adnetwork_id UInt8,
admediation_id UInt8,
platform_id UInt8,
geo_id UInt8,
device_id UInt8,
creative_id UInt64,
offers_log_id UInt64,
ratio Float32,
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(utc_date)
ORDER BY (advertiser_application_id, publisher_application_id, adnetwork_id, creative_id, geo_id, platform_id)
SETTINGS index_granularity=8192; -
Вот моя таблица
-
-
Они, обычно, связаны, например адвертайзер и креатив, если выбираем по креативу то пихаем в запрос еще и адвертайзера, в этом случае будет работать индекс и т.д..
-
-
-
Это важно, если есть связные данные то можно легко написать свой "оптимизатор" который модифицирует запрос чтоб он лучше работал
-
-
-
-
Я так понимаю что у вас поля в ORDER BY размещены в порядке нарастания кардинальности?
-
Да, нужно 2-е таблицы
-
Можно попробовать ещё добавить minmax
-
для числовых полей, если они входят в ORDER BY,
-
Скорее всего результат будет не впечатляющим, но лучшим чем без него.
-
-
Joined.
-
Почему? те блоки данных в которых хранятся другие диапазоны данных будут пропущены с помощью индекса
-
-
Т.е. индекс будет прочитан целиком и те блоки в которых значение лежит в нужном диапазоне
-
Но minmax индекс - маленький и легкий.
-
-
На возрастающих / убывающих числовых значениях должен давать хорошие результаты.
-
-
-
-
-
-
-
Добрый день!
Необходимо в select запросе вывести все элементы кроме первых 10. Знаю, что можно сделать limit 10, 5 тогда вернуться 11-15 элементы, а хотелось бы с 11 до конца. Как это сделать? -
на отсортированных данных - можете так попробовать:
SELECT columns FROM
(
SELECT columns
FROM table
ORDER BY ...
)
WHERE (rowNumberInAllBlocks() > 10);
Хотя кажется проще - просто пропустить ненужные строки на клиенте :) -
Действительно, лучше на клиенте)
-
спасибо
-
А если их 500к? 🙂
Можно попробовать так:
SELECT columns FROM table WHERE id > (SELECT id FROM table ORDER BY id LIMIT 5,1) -
-
SELECT MAX(id) FROM table LIMIT 5 - полагаю вернет вам не совсем то что вы ожидаете :)
-
-
-
Если вдруг соберетесь тесты писать то для Go теперь еще есть вот такая штука для помощи в тестировании КХ и Go https://github.com/ClickHouse-Ninja/ok :)
-
Ну если вы будете их как tuple искать - тогда да, наверное (хотя я не знаю реализовано ли это). Если хотите по каждому из них отдельно - то просто несколько отдельных индексов.
-
👍
-
-
-
-
А на 19.4 тоже не работает?
-
Пока не собирал его, попробую, спасибо
-
Кажется выше были обсуждения, между прочим о том что такие селекты должы работать (возможно не эффективно). @den_crane очень внимательно следит за темой разных вариантов джойнов, ну и @chertus поправляет всё что не работает. Думаю они дадут более компетентный ответ :)
-
Да. На уровне синтаксиса. Будет эквивалентно CROSS JOIN + WHERE
-
Не знаю кто и где информацию по мультисвязке держит, но вот на сайте производителя
https://clickhouse.yandex/docs/ru/getting_started/example_datasets/star_schema/
Рисуем звезду, т.с. -
Думаю, что вот это и нужно было
CREATE TABLE lineorder_flat
ENGINE = MergeTree
PARTITION BY toYear(LO_ORDERDATE)
ORDER BY (LO_ORDERDATE, LO_ORDERKEY) AS
SELECT *
FROM lineorder
ANY INNER JOIN customer ON LO_CUSTKEY = C_CUSTKEY
ANY INNER JOIN supplier ON LO_SUPPKEY = S_SUPPKEY
ANY INNER JOIN part ON LO_PARTKEY = P_PARTKEY; -
Это вы к тому что при денормализованных данных и джойны не нужны? Да, конечно для bigdata денормализация часто - выход. Но увы, денормализация применима не всегда, и со стороны базы думаю правильно давать выбор пользователю, и поддерживать стандарты SQL хотя бы настолько, насколько это необходимо для работы всяких популярных BI интструментов.
-
Я еще и о том, что КХ поддерживает мультисвязку уже.
Я вот о чем
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en
Category (leave one):
New Feature
Short description (up to few sentences):
Convert CROSS JOIN to INNER JOIN if possible
Detailed description (optional):
Rewrite AST. Move WHERE section of CROSS JOIN to ON section of INNER JOIN. -
Можно пробовать, только собрать с мастера февральскую версию.
-
Денормализация - это выход часто для любой субд, к сожалению.
-
Можно исправить проблему, не дожидаясь сборки следующего релиза, установив ClickHouse из master. У нас есть готовые сборки почти на каждый коммит. Воспользоваться ими можно так:
1. Заходим в список коммитов:
https://github.com/yandex/ClickHouse/commits/master
2. Находим самый верхний коммит с зелёной галочкой. Зелёная галочка означает, что все тесты прошли.
3. Нажимаем на зелёную галочку и находим там "ClickHouse build check". Жмём на Details.
https://clickhouse-builds.s3.yandex.net/0/e7541f03ddc22f8e399fc21a1a7edbb6294db454/report.html
4. Здесь находим строчку gcc-7, relwithdebuginfo, none, bundled. В данном примере, она верхняя.
5. Копируем ссылку на пакет clickhouse-common-static:
https://clickhouse-builds.s3.yandex.net/0/e7541f03ddc22f8e399fc21a1a7edbb6294db454/375561582/clickhouse-common-static_19.1.42_amd64.deb
6. Скачиваем, устанавливаем.ClickHouse/ClickHouseClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Солидно, только суть в
Можно пробовать, только собрать с мастера февральскую версию. -
если что вот такой бред https://github.com/yandex/ClickHouse/issues/4571#issue-416618479 уже работает в стейбле 19.4.0.49
-
Здорово! А вы пробовали его производительность?
-
Когда ожидать этого в релизной версии?
-
Вот здесь, обычно, планы
https://clickhouse.yandex/docs/ru/roadmap/ -
еще раз для тех кто в пронепоезде
select * from (
select x.b x, count(distinct x.c) ANIMAL
from (
select a.ANIMAL a, 'CAT' b, c.ANIMAL c, d.ANIMAL d
from ANIMAL a join ANIMAL b on a.ANIMAL = b.ANIMAL
left outer join ANIMAL c on (b.ANIMAL = c.ANIMAL)
right outer join (select * from ANIMAL union all select * from ANIMAL
union all select * from ANIMAL) d on (a.ANIMAL = d.ANIMAL)
where d.ANIMAL <> 'CAT' and c.ANIMAL <>'DOG' and b.ANIMAL <> 'FISH') as x
where x.b >= 'CAT'
group by x.b
having ANIMAL >= 0) ANIMAL
where ANIMAL.ANIMAL >= 0;
работает в stable , и кстати даже PG такое не осиливает. -
Это есть уже в 19.3, включается с помощью allow_experimental_cross_to_join_conversion. В 19.4 вроде как уже включено по умолчанию (дождемся чейнджлога).
-
про Пентаху: я бы начал исправлять пентаху.
-
version 19.3.4 - работает
-
что что собрать???
Вот полчаса назад собралось https://clickhouse-builds.s3.yandex.net/0/8227f5fe63751abdb515b097a846763cf86e6e81/report.html мастер -
Напомню что последния stable версия имеет номер 19.4.0 и была выпущена 9 марта (3 дня назад). Зачем вы собираетесь какие-то февральские версии собирать?
-
Это я к тому, что давно уже была, только слегка "мягкая" 😉
-
у меня LT обрабатывает миллиард ивентов и там 19.4.0.49 , уже два дня, проблем 0.
-
Ну на 19.4 пока жалоб не было :)
-
awful error в 19.4.0.49 пофикшено
-
угу. И фикс бэкпортирован в 19.1 и 19.3
-
Но 19.4 выглядит более интересным и перспективным вариантом чтобы пробовать на него перейти.
-
Joined.
-
Добрый вечер, такая ситцация 2 реплики потеряли лидера и таблица ушла в отказ (в лимит частей) с Leader was suddenly changed or logical error чет не особо получается найти как назначить лидера или вообще решить проблему.
Был бы презнателен за подсказку. -
1) что значит ушла в отказ / в лимит частей?
2) при каких обстоятельствах появилась ошибка?
3) Лидера сам должен выбирать по мере необходимости - можете проверить кто сейчас лидер в system.replicas для каждой таблицы -
1) Too many parts (300). Merges are processing significantly slower than inserts
2) при вставке новых данных
3) в обоих репликах is_leader = 0 -
при OPTIMIZE TABLE соответсвенно `Leader was suddenly changed or logical error`
-
Хм. При вставке кажется этого не должно проиходить. А что показывает
SELECT *
FROM system.zookeeper
WHERE path = '/<путь к таблице в zookeeper>/leader_election/' -
и что в system.merges / replication_queue?
-
забыл пояснить это, это таблица куда прицеплены материализованные вьюшки, пишется в исходную вьшки подхватывают выдавая Too many parts (300). Merges are processing significantly slower than inserts
-
"data": [
{
"name": "leader_election-0000000036",
"value": "srv1",
"czxid": "2388001816612",
"mzxid": "2388001816612",
"ctime": "2019-03-12 00:54:39",
"mtime": "2019-03-12 00:54:39",
"version": 0,
"cversion": 0,
"aversion": 0,
"ephemeralOwner": "144747400446214144",
"dataLength": 10,
"numChildren": 0,
"pzxid": "2388001816612",
"path": "***********"
},
{
"name": "leader_election-0000000031",
"value": "srv2",
"czxid": "1228360647127",
"mzxid": "1228360647127",
"ctime": "2019-03-05 03:21:19",
"mtime": "2019-03-05 03:21:19",
"version": 0,
"cversion": 0,
"aversion": 0,
"ephemeralOwner": "74178597817745408",
"dataLength": 10,
"numChildren": 0,
"pzxid": "1228360647127",
"path": "***********"
}
], -
в system.merges пусто, replication_queue по текущей таблице пусто
-
привет, подскажите а как должны быть представлены Decimal в https://clickhouse.yandex/docs/ru/interfaces/formats/#rowbinary
-
Похоже вы выполняете эти селекты и смотрите на ошибки не на лидере. Проверьте тоже самое на второй реплике, она должна быть лидером. Там в логах возможно есть какие-то сообщения об ошибках, проверьте
-
переписывание одной запятой в cross join включено в мастере какое-то время назад, для нескольких запятых - тут https://github.com/yandex/ClickHouse/pull/4661Multiple COMMA/CROSS JOINS by 4ertus2 · Pull Request #4661 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Category (leave one): New Feature Short description (up to few sentences): Rewrite multiple COMMA JOINS t...
-
на обоих серваках идентично, лидер 0, тоже самое в leader_election
"data": [
{
"engine": "ReplicatedSummingMergeTree",
"is_leader": 0,
"is_readonly": 0,
"replica_name": "srv1",
"total_replicas": 2,
"active_replicas": 2
}
],
"data": [
{
"engine": "ReplicatedSummingMergeTree",
"is_leader": 0,
"is_readonly": 0,
"replica_name": "srv2",
"total_replicas": 2,
"active_replicas": 2
}
], -
Спасибо, подожду, пока в мастер смерджат, на 19.4.0 этот запрос тоже не работает (
-
-
-
На обоих серверах одинаково показывает данные из зукипера?
-
да, могу трейс из логов скинуть с ошибкой на оптимайзе, но не думаю что чем то поможет, упирается в то что не лидер
-
А у вас случайно не включено replicated_can_become_leader = 0; ?
-
нет, опция не задана в конфиге
-
ишью похожий находил у человека вылечилось вроде просто обновлением кликхауса
-
но не то что бы сильно подходящее решение )
-
Скорее всего и рестарт должен помочь.
-
Только не очень понимаю "как же вы дошли до жизни такой" :)
-
попробуем завтра когда будет возможность рестарта с меньшей болью )
-
up, подскажите пожалуйста, пытаюсь вставить просто как закодированную строку, получаю [CH Error 33] DB::Exception: Cannot read all data. Bytes read: 36. Bytes expected: 70.:
-
Как целое число со знаком. В зависимости от точности Int32 / Int64 / Int128
-
2 числа? precision | scale?
-
precision & scale - в типе данных задаётся. Типа Decimal(12,2)
-
12 => меньше 19 и больше 10, значит будет записано как Int64.
-
Joined.
-
2 => значение умножено на 10e2.
-
как-то так.
-
спасибо!
-
Joined.
-
dead beef test:
➜ clickhouse-client --query='with toUInt64( 4022250974 ) as a SELECT arrayJoin([a,a,a,a]) as xy Format Native' | xxd
00000000: 0104 0278 7906 5549 6e74 3634 dead beef ...xy.UInt64....
00000010: 0000 0000 dead beef 0000 0000 dead beef ................
00000020: 0000 0000 dead beef 0000 0000 ............
➜ clickhouse-client --query='with CAST( 40222509.74 AS Decimal(12,2)) as a SELECT arrayJoin([a,a,a,a]) as xy Format Native' | xxd
00000000: 0104 0278 790e 4465 6369 6d61 6c28 3132 ...xy.Decimal(12
00000010: 2c20 3229 dead beef 0000 0000 dead beef , 2)............
00000020: 0000 0000 dead beef 0000 0000 dead beef ................
00000030: 0000 0000 -
Вы там посмотрите нет ли чего-то в логах интересного про выборы лидеров и т.п. И может быть найдете в логах с чего всё это началось.
-
Потому что всё что сейчас происходит больше похоже на следствия какой-то другой проблемы, а не на причину.
-
Joined.
- 13 March 2019 (201 messages)
-
-
-
-
Добрый день, помогите разобраться с кластером КХ из 2-х шард по 2 реплики на каждой шарде. Проблемы начались пару дней назад после падения всех зукиперов .
Сейчас наблюдаем такие показатели в очередях
shard 02 rep1
database─────┬─table───────────────────┬─zookeeper_path───────────────────────────────┬─queue_size─┬─inserts_in_queue─┬─merges_in_queue─┬─absolute_delay─┐
│ by_adv_stats │ .inner.cpc_products_ctr │ /clickhouse/tables/02/by/cpc_products_ctr │ 54071 │ 51320 │ 2751 │ 290718 │
│ kz_adv_stats │ .inner.ads_total_stats │ /clickhouse/tables/02/kz/ads_total_stats │ 27486 │ 27486 │ 0 │ 290706 │
│ kz_adv_stats │ .inner.cpc_products_ctr │ /clickhouse/tables/02/kz/cpc_products_ctr │ 28044 │ 28044 │ 0 │ 290706 │
│ kz_adv_stats │ currency_rate_shard │ /clickhouse/tables/02/kz/currency_rate_shard │ 1 │ 1 │ 0 │ 172938 │
│ kz_adv_stats │ events_shard4 │ /clickhouse/tables/02/kz/events_shard4 │ 29041 │ 29041 │ 0 │ 290706 │
│ ru_adv_stats │ .inner.ads_total_stats │ /clickhouse/tables/02/ru/ads_total_stats │ 4479 │ 4232 │ 247 │ 290703 │
│ ru_adv_stats │ .inner.cpc_products_ctr │ /clickhouse/tables/02/ru/cpc_products_ctr │ 37987 │ 37884 │ 103 │ 290703 │
│ ru_adv_stats │ click_shard │ /clickhouse/tables/02/ru/click_shard │ 8558 │ 8325 │ 233 │ 290748 │
│ ua_adv_stats │ .inner.ads_total_stats │ /clickhouse/tables/02/ua/ads_total_stats │ 49261 │ 49243 │ 18 │ 290715 │
│ ua_adv_stats │ .inner.cpc_products_ctr │ /clickhouse/tables/02/ua/cpc_products_ctr │ 56256 │ 55504 │ 752 │ 290715 │
│ ua_adv_stats │ click_shard │ /clickhouse/tables/02/ua/click_shard │ 41 │ 33 │ 8 │ 1623292 │
│ ua_adv_stats │ currency_rate_shard │ /clickhouse/tables/02/ua/currency_rate_shard │ 1 │ 1 │ 0 │ 86600 │
└──────────────┴─────────────────────────┴──────────────────────────────────────────────┴────────────┴──────────────────┴─────────────────┴────────────────┘
shard 02 rep2
─database─────┬─table───────────────────┬─zookeeper_path────────────────────────────┬─queue_size─┬─inserts_in_queue─┬─merges_in_queue─┬─absolute_delay─┐
│ by_adv_stats │ .inner.cpc_products_ctr │ /clickhouse/tables/02/by/cpc_products_ctr │ 1 │ 1 │ 0 │ 28881 │
│ kz_adv_stats │ events_shard4 │ /clickhouse/tables/02/kz/events_shard4 │ 10778 │ 9440 │ 1338 │ 1361030 │
│ ru_adv_stats │ click_shard │ /clickhouse/tables/02/ru/click_shard │ 10 │ 10 │ 0 │ 48766 │
└──────────────┴─────────────────────────┴───────────────────────────────────────────┴────────────┴──────────────────┴─────────────────┴────────────────┘
shard 01 rep1
пусто
shard 01 rep2
┌─database─────┬─table───────────────────┬─zookeeper_path────────────────────────────┬─queue_size─┬─inserts_in_queue─┬─merges_in_queue─┬─absolute_delay─┐
│ ru_adv_stats │ .inner.cpc_products_ctr │ /clickhouse/tables/01/ru/cpc_products_ctr │ 5471 │ 5420 │ 51 │ 54093 │
все хосты кроме shard 02 rep1 перегружались и некторые таблицы не могли подняться , помогало только добавление флага flags/force_restore_data 1 в зукиппер
вопрос что делать с очередями , что бы они разгреблись ?
в логах КХ ошибки
<Error> InterserverIOHTTPHandler: Code: 232, e.displayText() = DB::Exception: No part 20190312_20190312_25581_25581_0 in table, -
<Error> ru_adv_stats..inner.ads_total_stats (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 235, e.displayText() = DB::Exception: Part all_1429441_1617994_6741 (state Committed) already exists,
<Error> executeQuery: Code: 252, e.displayText() = DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts., e.what() = DB::Exception
<Error> kz_adv_stats.events_shard4 (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 0. Bytes expected: 8., e.what() = DB::Exception,
<Error> ru_adv_stats..inner.cpc_products_ctr (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 49, e.displayText() = DB::Exception: Part 201903_163478_172065_1440 intersects previous part 201903_83240_163478_3731 (state Committed). It is a bug.,
Чем можно помочь пациенту ? -
И еще вопрсо по зукиперру , сколько у кого znod там , у меня 12М на два кластера КХ. Мне кажется это много и из-за этого он нестабильно работает , переодически одна нода отваливается и вообще он стал требовать -Xmx12288m для старта. И еще переодически в логах
Got user-level KeeperException when processing sessionid:0x60120140b3d0008 type:multi cxid:0x18830 zxid:0xf20123f06e txntype:-1 reqpath:n/a aborting remaining multi ops. Error Path:/clickhouse/tables/01/by/ads_total_stats/replicas/host_1/parts/all_1574042_1574548_179 Error:KeeperErrorCode = NodeExists for /clickhouse/tables/01/by/ads_total_stats/replicas/host_1/parts/all_1574042_1574548_179 -
Сейчас у нас 13к нод в ЗК на 1 шард из 3х нод. Когда забыли почистить ЗК после отвала ноды ЗК рос очень быстро, было более 1М ключей в логе и ноды КХ не стартовали с такой таблицей. Снапшоты ЗК веслил по 350М, сейчас 3М.
-
Joined.
-
А как правильно чистить , после отвала ноды?
-
то есть у вас таблица в легаси формате?
-
Joined.
-
-
Не надо перезапускать сервер. Они сразу добавляются
-
-
Видимо я пропустил этот момент, когда читал документацию. Сейчас полез смотреть, вот что пишут на эту тему.
>Сервер следит за изменениями конфигурационных файлов, а также файлов и ZooKeeper-узлов, которые были использованы при выполнении подстановок и переопределений, и перезагружает настройки пользователей и кластеров на лету. То есть, можно изменять кластера, пользователей и их настройки без перезапуска сервера. -
Yep
-
Спасибо)
-
-
-
-
-
-
-
-
Лучше дропнуть таблицы на выводимой ноде. Если нода сломалась без плана и не вернется или вернется без данных, то вручную.
Используя zkcli , смотрим пути, указанные при создании таблиц, типа
ls /clickhouse/tables/<shard_id>/<table_name>/log
у нас это
ls /clickhouse/tables/02/graphite/log
если там много элементов, удаляем старые(delete /....) или все(rmr /....)
но после удаления всех нод по таблицы мы ее пересоздали -
там много данных, нельзя просто так взять и дропнуть
-
если проблема только в ЗК , а с данными ОК, нужно будет перенести данные в локальную таблицу(Detach .. Attach) и скопировать INSERT ... SELECT из локальной в реплицируемой
-
тогда удалять старые, у вас не настроен auto purge в ЗК ?
-
Если на проблема возникает прямо на старте, то директория всё-таки должна быть, больше информацию об этом куске взять неоткуда.
-
не на старте, там начинают грузиться таблицы из других схем, потом идет вот этот мердж и на этом останавливается все
-
у нас 3k дефолтный от хадупа достался
-
автопурж настроен
с данными не все ОК, сейчас в одну шарду вообще данные не попадают , и вдругой шарде нет части данных -
Останавливается всё это как? сервер не начинает принимать запросы? или просто не идут другие мержи?
-
Проверьте настройки
autopurge.snapRetainCount
autopurge.purgeInterval -
у нас :
autopurge.purgeInterval=1
autopurge.snapRetainCount=10 -
я рестартую сервер, смотрю в лог, там начинают прогружаться таблицы loading data parts, потом идет вот этот мердж и все падает, запросы эта нода не принимает
-
-
-
у нас аналогично
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
+ пришлось в крон добавлять пуржить все кроме последних 5 снепшотов
*/5 * * * * root /opt/zookeeper/latest/bin/zkCleanup.sh /var/lib/zookeeper/ -n 5
потому как бывало , если одна нода начинала тупить лидер место очень быстро на диске забивал -
-
-
-
Вы с ЗК метрики не собираете?
сколько у вас zk_znode_count ? -
-
метрики собираем , zk_node_count ~ 12 млн
-
а part_log включен ?
-
нет
-
У вас реально столько данных ?
, партиционирование по чему ? -
есть, в плане доступов и прочего ничено не менялось, я через консоль захожу в эту директорию и вижу что такого куска нет, видимо он где-то в другом месте
-
в недавних версиях баг (уже поправлен) - part_log включается сам по себе, даже если выключен в конфиге
-
-
-
-
Как понять что не нравится?
Poco::Exception. Code: 1000, e.code() = 1241, e.displayText() = mysqlxx::BadQuery: Operand should contain 1 column(s) (.......:3306)
запрос такого плана:
select user
from requests
where instance = 'aaaa'
and request_result = 'bbbb'
and toYYYYMMDD(request_date) = 20190306;
1. requests имеет engine=MySQL
2. если запрос выполнять с любыми 2 условиями а не 3, то работает
и вот так работает )
select user
from requests
where and(instance = 'aaaa', request_result = 'bbbb')
and toYYYYMMDD(request_date) = 20190306; -
чем может грозить удалением данных и метаданных таблицы part_log?
-
ключ шардирования ? rand()
данных порядка 100Gb на каждом шарде -
Потерей данных этой таблицы (история действий с кусками)
-
Можно ли как-то посмотреть время вставки конкретной строки в ClickHouse? Какой-нибудь параметр указать при запросе?
-
Это старая проблема движка mysql, явно никак не лечится. Я сделал вьюху над такой таблицей - работает нормально
-
а в чем именно проблема? то что нельзя более 2 and условий?
-
те, если сейчас нет инсертов и всяких мерджей, то можно грохнуть старые записи в фс и ничего не упадет?:)
-
-
-
-
-
-
-
-
-
В реализации движка
-
На работающем сервере конечно ничего вручную удалять не надо. Тогда просто DROP TABLE.
-
какую? продовую?)
-
-
-
-
-
-
-
-
-
-
-
Сама появится, можно просто дропнуть
-
-
действительно) сама появилась.
-
-
Друзья, подскажите.
Отличаются ли по производительности селектов простой MergeTree и ReplacingMergeTree?
Если брать ситуацию, когда все вставки и мержи произошли, FINAL и оптимайз не нужен -
баг, мутная штука этот arrayCount, она проверяет функцию на true / false, а если функции нет, то глючит (ну или баг в документации)
select arrayCount(x->(isNotNull(x) and assumeNotNull(x) != toDateTime(0)),[now(), now()-100, null,toDateTime(0)])
select arrayCount(x->(assumeNotNull(x) != toDateTime(0)),[now(), now()-100, null,toDateTime(0)]) -
нет, не различаются.
-
-
Нет, но выглядит так, как будто не очень сложно. Упорядочить точки по времени возникновения, сгруппировать в массив. arrayMap над массивом - получаем для каждой пары точек расстояние между ними. В конце - суммируем значения в массиве
-
-
-
если вы знаете эвристику, которая определяет outlier'ов, то можно её попробовать впихнуть в лямбду :)
-
Теперь в консоли управления Яндекс.Облака можно подключаться к кластерам ClickHouse и выполнять SQL-запросы.
Для этого войдите в консоль управления, откройте страницу нужного кластера и перейдите на вкладку SQL.
В документации сервиса Yandex Managed Service for Clickhouse подробно описано, как подключаться к кластерам и выполнять запросы.
#yacloud_news -
-
простая эвристика это фильтрация по скоростям, а также фильтрация точек у которых перемещение менее заданного
-
-
Мы уже угадываем, какие там таймауты выставлены
-
-
я сам компилял под mac. маны есть
-
-
docker на маке не нативен (требует vm), вообщем не так удобно...
-
я несколько дней с компилингом продолбался под мак
-
в итоге плюнул, пошел купил новый мак и поставил докер
-
Привет! Кто нибудь знает, есть возможность ALTER UPDATE делать с JOINом, чтобы была возможность получить данные из другой таблицы? Что то вроде ALTER TABLE Table1 ANY INNER JOIN Table2 USING someId UPDATE Field1 = Field2, где field2 из table2?
-
пользуй в докер-контейнере
-
Спасибо
-
-
а где его взять?
-
-
-
Вечер перестает быть томным
-
-
-
-
-
спасибо. просто в разделе про клиенты этого нет и где искать непонятно
-
у нас есть MV с uniq(userid) по дням, очень хорошо работает и для недель/месяцев, то есть данные комбинируются корректно
я почему-то интуитивно подозреваю, что если стейты хранятся так, чтобы можно было делать их слияние, то может, можно делать какие-то другие операции? типа разности и т.д. было бы очень полезно для счетчиков churn/… -
или слишком много хочу?
-
Разносить - это как?
-
а тут что не так?
root@vla1-fa05cdcde460:/# clickhouse-client --host man-xxxx.db.yandex.net --port 8443 --user xxxx --password yyyy -d luna
ClickHouse client version 1.1.54380.
Connecting to database luna at man-xxxx.db.yandex.net:8443 as user xxxx.
Code: 32. DB::Exception: Attempt to read after eof -
Старый клиент?
-
обновил, то же самое
-
ClickHouse client version 19.4.0.49.
Connecting to man-xxxx.db.yandex.net:8443 as user xxxx.
Code: 32. DB::Exception: Attempt to read after eof -
-
а если базу не указывать ?
-
то же
-
-
А что в логах сервера?
-
-
я не знаю, это chaas
-
-
-
-
dictGet/JoinGet
-
опять то же самое
-
-
-
-
-
-
поменял на 9440, то же самое
-
Тогда по 9000 попробуйте
-
9000 там закрыт
-
-
-
-
-
Разность.
Приведу пример
есть 2 записи в MV:
11-03-2019 uniqState(…) // uniqStateA
12-03-2019 uniqState(…) // uniqStateB
я могу делать SELECT day, uniqMerge(cnt) FROM mv GROUP BY day
и получу 2 числа - уникальные посетители для каждого дня
а могу SELECT uniqMerge(cnt) FROM mv WHERE day > today() - 2, и в результате получаю 1 число, которое является не просто суммой, а реальным значением uniq(userid) за _2_ дня.
На основании этого у меня есть догадка, что стейты для каждого из дней несут в себе достаточно данных, чтобы можно было их комбинировать, грубо говоря, я беру объединение двух множеств, а потом его мощность.
Вопрос в том, насколько реально выполнять другие операции, например, разницу тех же множеств? Даже теоретически, если сейчас такого кода нет, возможно ли такое? -
Я вас понял, думаю что такое реализуемо в КХ
-
почему может возникать
<Error> Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/by_adv_stats//%2Einner%2Ecpc_products_ctr.sql, error: DB::Exception: The local set of parts of table by_adv_stats..inner.cpc_products_ctr doesn't look like the set of parts in ZooKeeper: 6.27 million rows of 7.71 million total rows in filesystem are suspicious. There are 0 unexpected parts with 0 rows (0 of them is not just-written with 0 rows), 4 unexpectedly merged parts with 6266329 rows, 23877 missing obsolete parts (with 639863 blocks), 0 missing parts (with 0 blocks)., stack trace:
и может ли приводить create /clickhouse/tables/01/by/cpc_products_ctr/replicas/rep_host1/flags/force_restore_data 1 к потере данных ? -
Joined.
-
-
joinGet подходит, спасибо
-
насколько я помню, ставил отсюда как-то https://github.com/arduanov/homebrew-clickhouseGitHub - arduanov/homebrew-clickhouse: ClickHouse for MacOS Sierra and High Sierra.
ClickHouse for MacOS Sierra and High Sierra. Contribute to arduanov/homebrew-clickhouse development by creating an account on GitHub.
-
-
Интересно, есть ли у кого опыт постоянной работы со spark над clichouse. Там то аналитические функции точно есть
-
А есть ли в ClickHouse возможность самому писать UDF или SP, как например в SQL Server?
-
А что именно нужно?
-
Нет, только сразу в КХ
-
Окошечные агрегаты, например...
-
Всмысле только встроенные разрабами в само КХ?
-
Да. И политика такая что пока от разрабов UDF не ждите. Если что надо - пишите сразу пулл реквест
-
Ага
-
Joined.
-
Добрый вечер, не подскажите почему, когда делаю 2 одинаковых вставки в таблицу с Engine = ReplicatedSummingMergeTree(), в логах пишет
2019.03.13 18:33:08.492824 [ 93 ] {} <Trace> HTTPHandler: Request URI: /?database=meter&output_format_write_statistics=1&query=INSERT+INTO+facts+FORMAT+CSVWithNames
2019.03.13 18:33:08.493055 [ 93 ] {7ca04a36-4d93-4ace-9924-bcbf48d40c1d} <Debug> executeQuery: (from [::ffff:192.168.18.38]:36970, user: external) INSERT INTO facts FORMAT CSVWithNames
2019.03.13 18:33:08.495169 [ 93 ] {7ca04a36-4d93-4ace-9924-bcbf48d40c1d} <Debug> meter.facts (Replicated OutputStream): Wrote block with ID '201901_4647298900027749533_1201448766003505829', 1 rows
2019.03.13 18:33:08.496383 [ 93 ] {7ca04a36-4d93-4ace-9924-bcbf48d40c1d} <Information> meter.facts (Replicated OutputStream): Block with ID 201901_4647298900027749533_1201448766003505829 already exists; ignoring it.
и данные теряются, а когда вставка идет в точно такую же таблицу, но SummingMergeTree(), то всё хорошо
ClickHouse server version 19.1.6 -
Хочу похвастаться и спросить совета по дальнейшему вектору действий.
Появилось желание и возможность сделать Excel клиент к YACH (freesource) , пока он умеет не много
1) хранить пул подключений
2) хранить и исполнять SQL
Работает через HTTP
Так как для меня это академический интерес - то ищу "бета-тестора", что бы довести продукт до ума . Стучитесь в личку -
надо посмотреть всякие системные таблицы про репликацию видимо system.replicas там
-
так работает дедупликация на реплицируемых таблицах, для того чтобы вставки можно было повторять при ошибках, ищите в чатике слово insert_deduplicate
-
https://clickhouse.yandex/docs/ru/operations/table_engines/replication/
Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоков данных одинакового размера, содержащих одни и те же строчки в одном и том же порядке), блок будет записан только один раз. Это сделано для того, чтобы в случае сбоя в сети, когда клиентское приложение не может понять, были ли данные записаны в БД, можно было просто повторить запрос INSERT. При этом не имеет значения, на какую реплику будут отправлены INSERT-ы с одинаковыми данными. Запрос INSERT идемпотентный. Параметры дедуплицирования регулируются настройками сервера merge_tree -
В документации про insert_deduplicate ничего не было. Это конфиг на всё семейство ReplicatedMergeTree или для всго MergeTree? И если я иду вообще в неправильном направлении, может надо архитектуру поменять?
Таблица такой структуры.
Ключ состоит из трех колонок(timestamp(minutely), int, int) и плюс ещё где-то 20 колонок int и decimal, которые надо суммировать. Репликацию использую в качестве бекапа, все инсерты на один хост идут. Инсерты раз в минуту большими порциями(3-5 млн строк) -
в реальной жизни пачка из 1000тыс строк естественным образом повторится не может (вероятность 0%)
дедупликация -- любые репликатид, в зукипере хешсумма последних 100 бклоков , хранится неделю. Все это настараивается и выключается.
но еще раз "в реальной жизни пачка из 1000тыс строк естественным образом повторится не может (вероятность 0%)" -
>Инсерты раз в минуту большими порциями(3-5 млн строк)
а что такое инсерт?
insert into values () () () () ()миллион раз -- это пачка
vs
insert into values ();
insert into values ();
... миллион раз -- это миллион пачек
insert into values (); -
Инсерт идет одной пачкой. И у меня как раз случай когда повторяются. Проверил на реальных даннтх. Из этих 1000тыс может быть где то 72К строк где ключ идентичен(minutely_timestamp, int). Структура примерно такая
CREATE TABLE test_replicating_summing
(
minute_timestamp DateTime,
country_id UInt64,
count UInt64,
metric_1 UInt64,
metric_2 UInt64,
............................
)
ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/{shard}/test_replicating_summing', '{replica}')
PARTITION BY toYYYYMM(minute_timestamp)
ORDER BY (minute_timestamp, country_id)
И в это идет идет потом что-то типа этого
INSERT INTO test_replicating_summing VALUES
('2019-01-01 00:00:00', 1, 1, 0, 0, ........)
('2019-01-01 00:00:00', 1, 1, 0, 0, ........)
('2019-01-01 00:00:00', 2, 1, 0, 0, ........)
('2019-01-01 00:00:00', 2, 1, 0, 0, ........)
('2019-01-01 00:00:00', 1, 0, 0, 1, ........)
..................................................................... -
прикольно,
ну добавьте какое-нибудь поле типа uuid или номер пачки, а в summing в первичный ключ не включайте. -
метрики/строки схлопнутся, а uuid останется any()
-
или я не понял, и у вас внутри инсерта повторяются куски? так дефолтный max_insert_block_size=1mil
-
внутри инсерта куски повторяются. По этому и хотел summing использовать. Про max_insert_block_size знаю. Можно будет разделить чтобы максимум 1млн строк было. Но все равно будут повторяться
-
так а если задать max_insert_block_size = 100mil
-
ну т.е. либо задавайте в insert (,,,,,,uuid) values( одинаковый id пачки)
и лейте строки по миллиону , и у каждого insert разный id пачки -
Я правильно понял, что задав insert_deduplicate=0 при подключении, у меня все пойдет и будет суммироваться по любому?
-
да
-
Мне кажется этого будет достаточно
-
Надо порпобовать на реальных данных и проверить с цифрами, которые уже есть
-
вот это clickhouse-client --insert_deduplicate=0
100% работает -
если разницы не будет, то всё ок. Кроме логов, где нибудь ещё можно понять, что вставка не произашла?
-
нет
-
В каких нибудь системных таблицах?
-
понятно
-
И откуда ещё пожно узнать про секретные незадокументированные параметры))) ?
-
все документировано, я все смотрю тут
clickhouse-client --help -
uniqState не хранит самих значений, он всякие хитрые алгоритмы и структуры использует. Поэтому из uniqState обратно уже ничего не извлечь. Разность скорее всего тоже невозможно. Теоретически это возможно с uniqExactState, но гораздо более естественно и без изменений кода можно добиться нужного вам эффекта с помощью groupUniqArrayState
-
По "стоимости" использование groupUniqArray должно быть примерно равно использованию uniqExact, и обе значительно дороже (но точнее) чем uniq
-
Joined.
-
Парни яндексоиды. Есть проблемы немношко.
Get:12 http://repo.yandex.ru/clickhouse/deb/stable main/ Release [749 B]
Get:13 http://repo.yandex.ru/clickhouse/deb/stable main/ Release.gpg [543 B]
Err:13 http://repo.yandex.ru/clickhouse/deb/stable main/ Release.gpg
Signed file isn't valid, got 'NODATA' (does the network require authentication?)
Причина: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=923668
В двух словах - подпись Release с некоторых пор должна быть только ascii-armored. -
Здраствуйте. Выполняю следующий запрос: select top 100 * from all_trades order by ServerDate desc - проблема в том что Clickhouse проходит по всем 100 миллионов записей, при том что ServerDate - это PRIMARY KEY, и также при создании таблицы указывалось "ORDER BY ServerDate". Почему запрос делаеться так неоптимально и длиться 10 секунд, при том что нужно вернуть всего 100 записей. Это скрипт таблицы (скриншот): https://i.imgur.com/BgeQCyv.png. В запросе all_trades - это Distributed таблица
-
>Почему запрос делаеться так неоптимально и длиться 10 секунд
потому что КХ OLAP база данных которая не OLTP. Вам mysql нужен. -
Можно просто итеративно приближаться к искомому where ServerDate >= today() , where ServerDate >= today() -1
-
да, вы правы, если использовать where тогда все моментально. спасибо 👍
-
а тогда возможно проблема в еще была в *, КХ читает все колонки, не понимая что нужно только 100 записей. Как-то хитро надо писать запрос, но как не очень понятно как идентифицировать первичный ключ, чтобы выбрать по нему все колонки только для определнных записей.
- 14 March 2019 (171 messages)
-
Joined.
-
Спасибо, разберёмся вместе с админами репозитория!
-
Оптимизация - читать данные в порядке первичного ключа, если есть ORDER BY по нему - не сделана. Эта задача в процессе.
-
Выглядит как очень глупый (но простой) баг. Заведёте issue на GitHub?
-
12M нод в ZooKeeper - это много. Может быть нормальным только при наличии очень большого количества таблиц типа ReplicatedMergeTree или большого количества серверов или очень частых вставок. Для сравнения, в Яндекс.Метрике примерно столько же нод в ZooKeeper на кластер из более 600 машин.
Также такое возможно при наличии неактивных (умерших) реплик, для которых всё ещё присутствуют записи в ZooKeeper, и накапливаются логи. Проблему накопления логов для таких реплик решили в одном из недавних релизов. Если версия ClickHouse старая, то рекомендую обновиться. -
В таблице system.replication_queue можно посмотреть на конкретные записи в очереди репликации - должна быть написана причина, почему они не обрабатываются.
-
ClickHouse server version 18.10.3 revision 54405.
last_exception: Code: 49, e.displayText() = DB::Exception: Part 20190222_20190228_62164_79947_544 intersects previous part 20190222_20190222_62153_62166_3 (state Committed). It is a bug., e.what() = DB::Exception -
-
-
Видимо должен правильно быть сконфигурирован кластер. Таблице Distributed все равно из чего читать - из Replicated или нет. Она делает селекты со всех шардов одновременно, из каждого шарда выбирая по одной реплике
-
Ребят, подскажите пытаюсь вставить данные из формата CSV и согласно документации форматирую данные для массивов в таком виде -" [ 'item','item1' ],['120','130']" соотвественно для колонок типа Array(String). Но проблема, когда значений больше 1 получаю ошибку -
Column 8, name: item_names, type: Array(String), parsed text: <EMPTY>ERROR
....
DB::Exception: Cannot parse input: expected ] at end of stream.: (at row 1).
Не могу понять как нужно значения для массивов форматировтаь
PS: данные нужны при использовании external data (если это как то влиет) -
Скиньте полный пример строки, на которой падает
-
"1,352398080044953, 2019-03-13 12:20:00, sell, 10.0, \N, \N, \N,['item','1'], ['120','130']"
А вот так нормально рабоатет - 1,352398080044953, 2019-03-13 12:20:00, sell, 10.0, \N, \N, \N,['item'], ['120'] -
Массивы, item и числами в виде строк - это две разные колонки типа Array(String)?
-
-
Привет! Подскажите, пожалуйста, что я делаю не так в этом запросе? (кроме select *, это понятно, что ужас, текущая ситуация заставляет так делать)
SELECT *
FROM default.tracking
WHERE event_time IN ('2018-12-01 00:00:00', '2018-12-01 23:59:59') -
(возвращает 0 строк)
-
Да, я глянул в исходниках уже, там прямо понятно написано. Жаль, попробую с groupUniqArray, интересно сравнить с not in.
-
а сколько должен? у вас точно есть записи где event_time = '2018-12-01 00:00:00' ИЛИ '2018-12-01 23:59:59' ?
-
забаньте меня(
-
извините, я понял
-
👍
-
Да
-
Сейчас потестил с форматом TSV все нормально рабоатет -
"1\t352398080044953\t2019-03-13 12:20:00\tsell\t10.0\t\\N\t\\N\t\\N\t['item','1']\t['120','130']" -
Возможно для формата CSV массивы нужно как по особому экранировать. В доке написано что лучше использовать TSV, по опыту скажу это действительно так
-
Хорошо, тогда подскажите, пожалуйста, есть разумный способ получить Where between ('2018-12-01 00:00:00', '2018-12-01 23:59:59')? Там DateTime
-
Так же как и в обычном sql
datetime BETWEEN "2019-01-01 00:00:00" AND "2019-02-01 23:59:59" -
Спасибо большое!
-
а КХ сам следит за кол-м нод ? ( не берем случай , когда умерла реплика ) и что хранится в stat /clickhouse/tables/01/kz/click_shard/log
numChildren = 131260
у нас их очень много , как их можно безболезненно почистить ? на что они влияют ? -
Здравствуйте, у нас данные с клиентов приходят с таким вот ключом userid='ead8e026-da3c-460c-ba14-cf1540f66a20', можете подсказать какой в этом случае лучше выбрать ключ шардирования для Distributed таблицы?
-
Когда не понятно как КХ хочет чтоб вы ему сформатировали входные данные, попросите его самого это сформатировать и делайте так же :)
select 1,'a',['a','b','c'], [1,2,3] FORMAT CSV;
1,"a","['a','b','c']","[1,2,3]" -
т.е. в формате CSV таблицы нужно "оборачивать" в строку в двойных кавычках.
-
Спасибо, возьму на заметку)
-
И мои наблюдения кстати тоже подтверждают что TSV - самый "нормальный" вариант.
-
-
Может, M3?
-
нет, все таки h3 - https://eng.uber.com/h3/H3: Uber’s Hexagonal Hierarchical Spatial Index
Uber developed H3, our open source grid system for optimizing ride pricing and dispatch, to make geospatial data visualization and exploration easier and more efficient.
-
-
-
так если вы будете реплейсить по ключу, разве не такое же поведение получается?
-
arrayReduce?
-
Мне в итоге именно удалить надо, чтоб не разрасталось.
-
Вы можете выбрать размер партиции и ключ таким образом, что бы сдвигать старые данные в конец. А потом их удаляете. + ставите deleted = 1
-
Да, пока думаю о такой схеме, если не найду решения лучше. Здесь "удалять" == убивать партицию?
-
Да
-
-
Интересное решение. Я раньше использовал иерархические трехмерные декартовы координаты для пространственного индекса. Работало норм и, в отличии от h3, поддерживало не только координаты на поверхности сферы, но и высоту, а также не было проблем с отнесением координат к иерархии кубов на их границах.
-
-
Но replacing же заменит ваши старые данные новыми при совпадении по ключу?
-
или вы хотите retention?
-
-
-
-
а, вы имеете в виду поведение компакшена, если null записать?
-
-
ага
-
да, можно попробовать в определении матвью написать что-то типа select a, b, if(c == last, 1970-01-01, actualDate), и чистить партишен для старых дат
-
Всем привет!
Очень ищу системного архитектора aka DevOps aka DataOps с экспертизой любовью к КХ!
Москва, без удалёнки, ТК.
Компания - вставший на ноги стартап, с деньгами и заказчиками :) Делаем и продаём свою платформу обработки данных.
Задачи - интеграция CH в платформу (написание ansible ролей по раскатке, оптимизация запросов, интеграции)
Требования - любовь и знание CH, знание Linux (CentOS/RH).
Подробности в ЛС. -
Ближайшие планы в основном другим вещам посвящены, насколько мне извсетно. НО: процент непринятных пулл-реквествов очень не велик, каждый - сам кузнец своего счастья, так что если нужно - можете попробовать добавить :)
-
я бы с радостью, уметь бы еще =(
-
Думаю, если очень приспичит - специалистов в "плюсах" найти не невозможно (в том числе на "одноразовые" задания).
-
Прикрутить функцию / аггрегатную функцию к КХ на основе готовой либки на самом деле совсем не сложно.
-
так то да, надо только осознать ценность этого - я просто думал, что возможно h3 прижилось в яндексе после покупки русского убера и поэтому появление этих функций в КХ выглядит, с моей точки зрения, логичным))
-
спасибо, буду смотреть
вроде бы, только этой функции в документации нет ) -
-
В той, которую я открыл, есть)
-
В любом случае, вы всегда можете массив развернуть в строки и на них уже оперировать
-
странно, есть только в английской версии
-
А, ну я ее обычно и смотрю, хотя по моему опыту как раз в русской иногда можно найти что-то уникальное
-
а очередь DDL queue можно прямо из кх почистить ?
-
Коллеги,
есть таблица вида:
timestamp UInt64,
dt Date DEFAULT toDate(timestamp/1000)
при попытке вставить данные из JSON без поля dt
получаю dt = '0000-00-00'
я слишком много хочу ?
(select toDate(timestamp/1000) - дает верный результат) -
А в json timestamp как записан?
-
И какая версия КХ? Поищите в changelog, там в последних версиях описано про вычисление default для json-формата
-
"timestamp":1551906001869
те это unitx timestamp * 1000 + милисекунды -
19.3.4 revision 54415
-
ок, спасибо, почитаю
-
в теории в версии 18.16.0, 2018-12-14 это должно было быть исправлено, но по факту видимо нет
-
?insert_sample_with_metadata=1 в строке подключения к кликхаузу и заработает как надо
-
дефолт поля в json не работают же
-
Включите опцию insert_sample_with_metadata, в changelog об этом забыли написать
-
В одной из последних версий пофиксили вроде как :)
-
-
@PodkinSA @ztlpn благодарю! с insert_sample_with_metadata работает!
-
всем привет!
есть необходимость перенести одну базу на другой диск
и в /var/lib/clickhouse/data/ симлинк на переехавшую базу
пройдет такое? -
-
cat ActivityExchange | clickhouse-client --query="INSERT INTO mt4.ActivityExchange FORMAT CSV"
Received exception from server (version 19.1.6):
... DB::Exception: Database ActivityExchange doesn't exist.
база и таблица созданы, если попробовать указать имя таблицы как: mt4.activityExchange, то КХ напишет, что такой таблицы нет. Почему КХ считает название таблицы с большой буквы именем БД? -
даже с ключем --database=mt4 он выдает все туже ошибку
-
спасибо!
-
да эт у меня косяк был с определением таблиц, вопрос закрыт
-
-
Добрый день! Как можно в агрегирующем запросе склеить массивы?
arrayConcat не подходит.
Я делаю вот так
SELECT
placemark_id,
groupArray(answer_array_string) photos
FROM answer_statistics_records
GROUP BY placemark_id;
=>
+ placemark_id + photos +
| 2 | [[], []] |
| 1 | [[], [], [], ["/aaa/aa", "/bbb/bb"], ["/ccc/cc", "/ddd/dd"]] |
но как их объединить в итоге в один массив не нахожу функции. Как в некоторых языках есть фунцкия flatten, аналога не нахожу
``` -
нашел - groupArrayArray
-
Ошибка "intersects previous part" присутствовала в ранних версиях ClickHouse. Следует чинить так:
- обновление на последний stable;
- выполнить DETACH PARTITION и ATTACH PARTITION затронутых данных в затронутой таблице. -
ClickHouse сам удаляет старые ноды в /logs. Их может быть много, если одна из реплик сильно отстаёт или неактивна.
-
Да, есть сильно отстающие реплики , и отставание растет , я так понимаю , что из-за того , что очередь не разгребается.
-
спасибо, сейчас попробую починить
-
Привет, а сильно важно, сколько данных лежит в одной партиции в КХ? Например, у нас планируется порядка уникальных 50кк записей в год и мы хотим сложить всё в одну партицию, чтобы можно было использовать ReplacingMT и схлопывать данные
-
50млн.? без проблем, это крохотный размер для КХ.
Партиция схлопнется в один парт если ее размер меньше максимального размера парта (по умолчанию макс. размер 150ГБ, настраивается).
Т.е. если в партиции будет два парта, например 150ГБ + 3ГБ, они не схлопнутся в один и дубликаты не исчезнут.
Но это точно не про 50млн, это скорее про 50млрд. -
Могут быть (не очень страшные) побочные эффекты. Например попытка сделать бэкап будет заканчиваться примерно так: Cannot link /var/lib/clickhouse/data/... to /var/lib/clickhouse/shadow/... errno: 18, strerror: Invalid cross-device link.
-
Приветствую, коллеги!
Создал таблицу с произвольным ключом партиционирования, ключ - производное от трех полей.
Залил в таблицу данные, получилось порядка 160к партиций.
Выполняю два запроса с таблиц по разному ключу партиционирования в clickhouse-client. В запросе в секции where прописываю конкретную поля, по которым формируется партиция.
В первом случае, в таблице с партициями порядка 160к результат выводится в течение 1 сек.
Во втором случае, где партиций порядка 160, резултат выводится за 0.3 сек.
В первом случае даже не показывается, сколько строк было обработано в ходе выполнения запроса, во втором - показывается.
Предполагаю, в первом случае, он просто ничтожно мало данных считывает, вот и не показывает эту инфу.
Помогите пожалуйста понять, из-за чего запрос выполняется так долго в первом случае и можно ли это как-нибудь ускорить? -
слишком много партиций, ФС загибается.
-
почему ФС? Просто при 160к, надо сходить в 160к*3*(кол-во полей) файлов. И результат из 160к кусков соединить.
Ф.С. тут не при чем. Тут линейная зависимость. Открыть один файл - 1 сек, миллион файлов - 1млн. сек. -
Если я всё правильно понял - там запрос заужен до конкретных партиций.
-
> В запросе в секции where прописываю конкретную поля, по которым формируется партиция.
-
просто не делайте 160к партиций. Партиции для управления retention, грубо говоря чтобы дропать проще.
Используйте sort-key для фильтрации -
Если в одной папке создать 160 тысяч подкаталогов, то "заглянуть" в подкаталог - становится не такой уж простой задачей.
-
я хотел сказать что сама Ф.С. не виновата и это не оверхед из-за Ф.С. ну т.е. надо сходить на диск 160тыс. раз в разные места. Даже если нет ф.с. и мы знаем куда пойти по адресу на диске, надо сделать 160 тыс. seek, а жесткий умеет только 200iops
-
это потому что делается stat 160тыс раз ( для каждого файла )
-
пролистать каталог можно со списком файлов, если за размером не ходить в inode
-
👍 отличный пример
-
в принципе, все удалось, пришлось только "векторизовать" эвристики
-
всё так. Но если это HDD то зависимость далека от линейной, как раз из за seek / чтения inode в рандомном порядке. Что для КХ явлеяется "внешним" тормозом, что можно назвать тормозами на уровне ФС / ОС.
-
Joined.
-
Добрый день. Подскажите, есть ли в КХ функция определяющая пересекаются ли массивы?
Один массив храниться в колонке БД. Второй задается в запросе.
Сейчас я делаю вот так:
arrayExists(x -> arrayExists(y -> y = x, ['value1', 'value2']), ArrayField)
Это работает, но часто падает по памяти. Потребляет количество памяти не сопоставимое с размерами массивов.
Переделал так:
array join ArrayField as ArrayValue
where ArrayValue in ('value1', 'value2')
Это работает отлично но это приходится делать в подзапросе.
Хочется пересекать массывы одной функцией.
В постгресе это делается вот так:
ArrayField @> ARRAY['value1','value2'] -
(ответа я не знаю) если массивы предварительно отсортированы то можно проверить только границы (концы отрезков).
--
а нет, нельзя. -
-
Joined.
-
-
Здравствуйте коллеги, подскажите есть какой-то аналог гитхабовских awesome страниц для clickhouse?
-
в смылсе faq ? я тесты смотрю в исходниках
-
Я бы сказал сборник полезных библиотек, приложений, админок, faq и т.д.
-
Типа такого https://github.com/dzharii/awesome-elasticsearchGitHub - dzharii/awesome-elasticsearch: A curated list of the most important and useful resources about elasticsearch: articles, videos, blogs, tips and tricks, use cases. All about Elasticsearch!
A curated list of the most important and useful resources about elasticsearch: articles, videos, blogs, tips and tricks, use cases. All about Elasticsearch! - GitHub - dzharii/awesome-elasticsearch...
-
-
Joined.
-
т.е. КХ всегда в любом случае ходит во все папки партиций за информацией?
Например, у нас партиционирование по умолчанию - по месяцам. мы в where указываем нужный месяц от поля, по которому партиция формируется, а КХ все равно пройдет по всем 12 папкам партиций в году, для того, чтобы взять метаданные, которые укажут, с какой конкретно папки ему следует читать? -
нет. Партиции элиминируются.
Т.е. партиционирование по partition by (X%13, toDate(aaa))
для каждой партиции (и даже парта?) хранится min/max(x) min/max(aaa)
поэтому КХ при where x = 12 зайдет только в партиции у которых есть данные в 12 -> min/max -
и не важно сколько полей в where оба (X, ааа) или только одно, и порядок тоже не имеет значения
-
Рекомендую вам попробовать рестартовать КХ у которого 160 тыс. партиций и понаблюдать как он стартует 4 часа (просветляет).
-
А если это поле типа string, то min/max уже не работает?
Я видел кастомные индексы типа set, они могут помочь в данном вопросе?
Или если, partition by (X), и в where указывается конкретный X, то КХ будет ходить только в эту партицию, а остальные проигнорирует? где X - целое чилсо -
работает, skip индексы не про это (смотрите сюда t.me/clickhouse_ru/92372 )
-
примерный DDL в студию, примерные запросы в студию, все проще, и наоборот все сложнее (КХ умеет сканить малокардинальные поля в префиксе sort-key)
-
Для строк также точно вычисляется min / max , потому что строки можно сравнить - 'AAA' больше чем '0'
-
>Или если, partition by (X), и в where указывается конкретный X, то
>КХ будет ходить только в эту партицию, а остальные проигнорирует? где X - целое чилсо
да, но если возможных X больше чем 20, то так делать нельзя. Будет слишком много партиций.
В общем если партиций больше 100 -- это плохо, больше 1000 -- это все - П.
И в чем проблема с sort-key? c order by X ? -
примерный DDL
CREATE TABLE tbl
(
load_date UInt64
, id UInt32
, type_id UInt16
/*прочие поля*/
, sn String
, deleted UInt8
)
ENGINE = MergeTree()
PARTITION BY (sn, id)
ORDER BY (sn, id, type_id, load_date)
SETTINGS index_granularity = 8192
запросы всегда идут с where sn = ?, id = ? -
А можно глянуть на select * from system.parts where table ='tbl' and active order by rows desc limit 10?
-
Могу ошибаться с именем rows
-
Немного изменил названия для sn, и ключ по трем полям сейчас(но, пробовал и по двум, как в DDL выше)
partition name active marks rows bytes_on_disk data_compressed_bytes data_uncompressed_bytes marks_bytes modification_time remove_time refcount min_date max_date min_block_number max_block_number level primary_key_bytes_in_memory primary_key_bytes_in_memory_allocated database table engine path
(\'candy\', 1096040611, 199) 88e18cb9f45361af428f2f69453b03ae_178702_190740_1 1 42 42372 938850 924241 3262644 11424 2019-03-07 17:39:42 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 178702 190740 1 1680 20992 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/88e18cb9f45361af428f2f69453b03ae_178702_190740_1/
(\'candy\', 1096040611, 199) 88e18cb9f45361af428f2f69453b03ae_192608_198616_1 1 19 18981 492621 485001 1461537 5168 2019-03-07 18:08:05 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 192608 198616 1 760 20736 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/88e18cb9f45361af428f2f69453b03ae_192608_198616_1/
(\'something\', 236800706, 198) b17f90fbb194f4e103183b16b697d12f_1311061_1336208_6 1 19 18491 405477 398170 1312861 5168 2019-03-08 13:42:15 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 1311061 1336208 6 646 20608 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/b17f90fbb194f4e103183b16b697d12f_1311061_1336208_6/
(\'milan\', 1080998632, 199) 01beac0d200c41cebd47fe423c74f5a2_801935_842037_4 1 10 9456 330166 325435 718656 2720 2019-03-08 04:23:15 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 801935 842037 4 390 20608 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/01beac0d200c41cebd47fe423c74f5a2_801935_842037_4/
(\'milan\', 1080998664, 198) 7d282525e151bb3d1d45f4e57af350fd_770935_792575_2 1 9 9043 312807 308378 687268 2448 2019-03-08 02:37:30 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 770935 792575 2 351 20608 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/7d282525e151bb3d1d45f4e57af350fd_770935_792575_2/
(\'earth\', 303003438, 198) 6640f9ddce0d19e349804a7b0841de2e_427461_466903_4 1 9 8398 327144 322717 638248 2448 2019-03-07 21:44:14 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 427461 466903 4 351 20608 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/6640f9ddce0d19e349804a7b0841de2e_427461_466903_4/
(\'candy\', 203015210, 198) 4209a6288b62e86b087529612c03edb8_136277_163475_6 1 8 8058 247371 243254 620466 2176 2019-03-07 17:17:53 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 136277 163475 6 320 20608 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/4209a6288b62e86b087529612c03edb8_136277_163475_6/
(\'neptun\', 203015210, 198) 98334fad91e6b3d93e4624a1e0059b42_1138226_1177020_4 1 8 7460 309103 304971 581880 2176 2019-03-08 09:25:46 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 1138226 1177020 4 328 20608 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/98334fad91e6b3d93e4624a1e0059b42_1138226_1177020_4/
(\'och\', 253900455, 198) 4682bcecc815cc8a01c781e8215f3f73_1311200_1337293_6 1 8 7203 301966 297929 511413 2176 2019-03-08 12:59:59 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 1311200 1337293 6 272 20544 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/4682bcecc815cc8a01c781e8215f3f73_1311200_1337293_6/
(\'mars\', 1165000307, 199) 10f1c553f3be1dfe0762c90319696bd5_31463_68250_4 1 7 7163 272495 268637 530062 1904 2019-03-07 15:28:14 0000-00-00 00:00:00 1 0000-00-00 0000-00-00 31463 68250 4 259 20544 default tbl MergeTree /var/lib/clickhouse/data/default/tbl/10f1c553f3be1dfe0762c90319696bd5_31463_68250_4/ -
>PARTITION BY toYYYYMM(load_date)
> ORDER BY (sn, id, type_id, load_date)
>запросы всегда идут с where sn = ?, id = ?
ORDER BY покрывает вашу задачу -
Надеялся, что будет вывод из clickhouse-client, с именами полей... :)
-
подредактировал вывод :)
-
Т.е. в одной партиции не больше 50к строк?
-
В одном парте, пардон
-
да, получается что так
-
А если select partition, sum(rows) as s from system.parts where table ='tbl' and active group by partition order by s desc limit 10?
-
partition s
(\'candy\', 1096040611, 199) 61353
(\'mars\', 236800706, 198) 18491
(\'earth\', 1080998632, 199) 9456
(\'earth\', 1080998664, 198) 9043
(\'neptun\', 303003438, 198) 8398
(\'candy\', 203015210, 198) 8077
(\'rainbow\', 203015210, 198) 7480
(\'mars\', 253900455, 198) 7209
(\'somesn\', 1165000307, 199) 7163
(\'earth\', 1080998632, 198) 7100 -
У меня есть ничем не подкрепленное ощущение, что ключ партиционирования можно выбрать... подемократичней :)
-
Но я могу ошибаться, это просто ощущение :)
-
в смысле. ключ слишком сложный и КХ не может нормально подобрать, из каких партиций читать?
-
Если партиций много, но пишется/читается из одной, то все равно будет ухудшение производительности?
-
Проблема в ресурсах, потребляемых запросом
-
-
-
нет не будет.
Пока select покрывает малое кол-во партиций ухудшения не будет.
Просто когда их 10000, уже и инсерты начинают дробится на мелкие, и старт КХ замедляется. -
-
да, КХ сканит заголовки наверное в каждом файле.
-
-
-
t.me/clickhouse_ru/65490
ИМХО: при слиянии партов, старые парты становятся inactive, и через 10 мин. удаляются.
при внезапном рестарте КХ (в течении тех 10мин.) при старте смерженный парт будет проверен на целостность, если он битый (сервер ребутнулся, fsync нет, новый парт был только в кеше) из inactive будет восстановлен новый парт (помержен), или они остануться inactive если не нужны.Alexey Milovidov in ClickHouse не тормозитС inactive директориями ничего делать не нужно. Разве что их можно удалить.
-
я не знаю точно, это не проблема проверки (вся эта метаинформация minmax в памяти), наверное это свойство куска, т.е. есть кусок 21-42, insert вставляет 36-71 (ничего проверять и обновлять не надо). select where 40 находит что вот в тех двух кусках есть 40 (в смысле не заходя в сами куски, просто на верхнем уровне пайплайна)
вот тут https://github.com/yandex/ClickHouse/pull/2468/commits AlexZ это чинил, можно посмотреть точнее. -
-
yandex/ClickHouse was tagged: v19.1.14-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v19.1.14-stable
Release notes:
v19.1.14-stable -
Очень маленькое изменение: если было включено asterisk_join_left_columns_only = 1 и использовался GLOBAL JOIN с USING, то могло выдаваться сообщение Column ... is queried twice.
-
Joined.
-
Joined.
-
кто нибудь измерял производительность, сколько запросов в секунду тянет clickhouse?
-
от 42 и выше
-
-
если придет 10000 человек и одновременно захотят получить статистику по своим профилям, им это не удасться?
-
Зависит от кластера. Но в целом удастся, чего бы нет
-
Если каждого из них будет интересовать ответ на вопрос "сколько будет 40+2" то думаю один сервер КХ справится с тысячами запросов в секунду. Если каждый из них будет выполнять сложные агрегации на терабайтах данных, то может быть и при одном запросе в минуту сервер перегружен.
Мультик вспомнился https://youtu.be/TQhNNgzTEJ4Жадный богач (1980) Кукольный мультик | Золотая коллекцияБЕСПЛАТНО СМОТРИМ ВСЁ ТУТ 👉 https://smotrim.ru/brands/tag/231140/?utm_source=youtube&utm_medium=all&utm_campaign=all_0 👍👍👍 Мультфильм "Жадный богач". Кукольный мультик 1980 года. Золотая коллекция. ⭐Подписаться на лучшие советские мультики ▶https://www.youtube.com/channel/UCU06hfFzcBjQl9-Ih2SvpoQ?sub_confirmation=1 ⭐Все мультфильмы подряд ▶https://www.youtube.com/playlist?list=PLYymTuJXocGKmjzy9GLsS4G-Il89EX-dk Кукольный мультипликационный фильм. О том, как был наказан за жадность богач, который потребовал изготовить семь шапок из небольшой шкуры. Смотрите популярные советские мультфильмы: 🔸Мама для мамонтёнка https://www.youtube.com/watch?v=sVYMsNay8G0 🔸По дороге с облаками https://www.youtube.com/watch?v=0DnjD7w-2FI 🔸Подарок для слона https://www.youtube.com/watch?v=5FZ1yKwQCOY 🔸Дом для Кузьки https://www.youtube.com/watch?v=8JFdlT5XGNc 🔸Падал прошлогодний снег https://www.youtube.com/watch?v=DwJznO6SqyM 🔸Клад. Тигрёнок и его друзья https://www.youtube.com/watch?v=Iz1kKv34-wY 🔸Лето кота Леопольда http…
-
Joined.
- 15 March 2019 (134 messages)
-
-
-
-
если у вас есть партиции которые уже не меняются, можно делать freeze и перетаскивать хоть рсинком.
-
Для этого лучше использовать ограничение на максимальное количество одновременных запросов плюс установить размер и длительность очереди ожидащих запросов в https://github.com/Vertamedia/chproxy . Максимальное кодичество одновременных запросов лучше делать в районе кодичества ядер процессора на одной ноде * 2. БОльшие значения обычно приводят к замедлению выполнения всех запросовGitHub - Vertamedia/chproxy: ClickHouse http proxy and load balancer
ClickHouse http proxy and load balancer. Contribute to Vertamedia/chproxy development by creating an account on GitHub.
-
Можно, но второй рсинк после останова кх нужно выполнять с флагом очистки файлов, которых уже нет в исходном каталоге
-
Коллеги подскажите как правильно оценить текёт ли у меня по памяти или я неправильно трактую ситуацию:
-
jemalloc.resident │ 4236693504
-
314 21.7 40.3 49469716 19935992 ? Ssl Mar07 2434:08 \_ clickhouse-server --config /etc/clickhouse-server/config.xml
-
ps показывает 20G по версии clickhouse 5G . Всё ли я правильно понимаю ? (19.1.6 revision 54413)
-
Joined.
-
-
можно чуть подробнее? как дотащить разницу после фриза ?
-
-
Всем хорошего дня. Какой на данеый момент самых стабильный драйвер для GOlang?
-
мне нравится вот этот github.com/kshvakov/clickhouseGitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouse
Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
А Вы случайно github.com/mailru/go-clickhouse не пробовали?GitHub - mailru/go-clickhouse: Golang SQL database driver for Yandex ClickHouse
Golang SQL database driver for Yandex ClickHouse. Contribute to mailru/go-clickhouse development by creating an account on GitHub.
-
непонра
-
почему?
-
этот использую, полёт нормальный
-
Так же вопрос почему ))))
-
Первым попался :)
-
Какое-то глубокое сравнения разных драйверов не проводил
-
мне надо был нативный формат вставки поколоночный
-
-
Но ведь он работает только через tcp коннект, не через http/https... А в tcp умеет только родной клиент...
-
ребят, а как правильно добавить поле в materializedView таблицу не удаляя её и не создавая новую?
-
Подскажите, где-то можно посмотреть размеры локальных словарей? Увеличил параметр low_cardinality_max_dictionary_size но что-то не вижу прирост производительности, думаю вот как проверить это можно
-
🤔 так ведь kshvakov/clickhouse использует как раз tcp коннект.
-
🤔