- 01 August 2018 (175 messages)
-
Joined.
-
Joined.
-
привет. внезапно прекратились мержи, в логах КХ ошибки типа:
2018.08.01 05:04:46.025443 [ 53 ] <Warning> local.clickstream_new (StorageReplicatedMergeTree, PartCheckThread): Found parts with the same min block and with the same max block as the missing part 201807-0_783_809_5. Hoping that it will eventually appear as a result of a merge.
в папке таблицы набралось много папок 201807-0_XXX_XXX_0.
вставляем в distributed таблицу, проблемы только у двух таблиц: оригинальной и ее копии с кастомным партиционированием, остальные мержатся нормально. процесс заливки данных не изменяли.
куда смотреть? -
scrape_uri - это адрес КХ (обычно 127.0.0.1), в прометеусе вы можете руками прописать адреса экспортеров, либо использовать консул и регать экспортеры там, если у вас окружение динамическое то лучше использовать консул и там регистрироваться, если нет то просто пропишите в него адреса экспортеров.
-
Добрый день!
Есть столбцы (string, hash): data1, data2, data3, и другие столбцы
Нужно делать поиск по data1 ИЛИ data2 ИЛИ data3
Как лучше организовать таблицу или таблицы, чтобы CH максимально хорошо и быстро искал нужные строки? -
Добрый день, коллеги!
Делаю выборку:
select request_id
from my_table
where request_id = '59f911f179bea204f6890ea5'
Результат - одна строка.
Затем подставляю в селекте вместо request_id некоторую константу, но с тем же условием:
select 'new_request_id' as request_id
from my_table
where request_id = '59f911f179bea204f6890ea5'
Результат - пусто.
Что бы это могло быть? -
Joined.
-
Так работает?
select 'new_request_id' as request_id2
from my_table
where request_id = '59f911f179bea204f6890ea5' -
Проще говоря он реплейсит request_id на new_request_id
-
-
Да, если присваивать другой алиас, то всё работает нормально.
-
Кто-нибудь использует кластер в который интенсивно пишут? Раз 50-100 в минуту я имею в виду.
Попробуйте стопануть одну реплику, у меня на второй прекражаються мержи и через 2-3-5 минут привет исключение о медленных мержах (притом такое поведение даже если все вьюхи убрать)
Может есть какая-то настройка чтобы оставшаяся в живых реплика не прекращала мержить?
Таблица причины почему мержи не идут полна такого
│ MetricsFree │ Not merging into part c1d05dd4c541bdc14737a222ad2b09b1_1147_1561_155 because part c1d05dd4c541bdc14737a222ad2b09b1_1147_1560_154 is not ready yet (log entry for that part is being processed). │ Poco::Exception. Code: 1000, e.code() = 111, e.displayText() = Connection refused, e.what() = Connection refused
и такого
│ Metrics │ Not merging into part babccf0c7ab1c3af920fb405ca79c901_36891_36895_1 because part babccf0c7ab1c3af920fb405ca79c901_36892_36892_0 is not ready yet (log entry for that part is being processed). │ Code: 234, e.displayText() = DB::Exception: No active replica has part babccf0c7ab1c3af920fb405ca79c901_36891_36895_1 or covering part, e.what() = DB::Exception │
Потеря реплики это обычный сценарии, верно?
А он поломан. Не критично? -
Joined.
-
Пишите синхронно, чтоб данные были на обеих машинах, сейчас записи о данных в ZK есть, а на оставшейся машине их нет и взять ей неоткуда (смотрите insert_quorum).
-
Если insert_quorum поставлю в 2 (2 реплики) то перестанет писать сразу же как я остановлю 1 реплику, верно?
-
-
Да
-
-
А не будут проблемы при неудавшихся вставках? Да и много ресурсов на кросс-репликацию.
-
я обычно делаю что-то типа такого
SELECT
date,
...
FROM
(
SELECT toDate('2018-07-02') + number AS date
FROM system.numbers LIMIT 7
) ANY LEFT JOIN (
...тут запрос, в результате которого могут быть "дыры" в датах...
) USING date -
О! Спасибо! Не знал про system.numbers, извращался с range()
-
Я тоже :)
SELECT
arrayJoin(aligned).1 AS ts,
arrayJoin(aligned).2
FROM
(
WITH
groupArray((ts, value)) AS series,
toDateTime('2018-01-01 00:00:00') AS zero_time,
range(4) AS range,
3600 AS step,
arraySort(arrayMap(pos -> (zero_time + (step * pos), arrayFirst(t -> (t.1 = (zero_time + (step * pos))), series).2), range)) AS aligned
SELECT aligned
FROM timeserie
GROUP BY metric
) -
Во-во, а если еще добавить скользящее среднее, то при зачитывании вслух будет открываться портал в варп
-
А с чего там сильно больше ресурсов? Там при вставке живые реплики из ZK проверяются + проверка что куски доехали, просто вставка медленнее.
-
Среднее, это чтобы экстраполировать, а не нулями забивать?
-
Чтобы отдельные большие значения не так сильно влияли на график
-
А где-нибудь есть статьи о механике всего процесса? А то не везде понятно, на что можно рассчитывать и как правильно делать.
-
-
а что за where ?
-
-
так вы таблицу собираетесь удалять или что ?
-
-
-
вообще не очень понимаю какие там условия могут быть
-
-
в дистрибьютед таблице нет данных же
-
-
-
-
Автор подразумевает, что мутационный запрос транслируется на нижележащие таблицы
-
ну а зачем для этого нужна дистрибьютед , делайте онкластер на локальные
-
зачем заходить при этом на каждый сервер тоже не понятно
-
-
-
Для альтер вроде поддерживается, по крайней мере все Альтеры я делаю он кластер
-
delete?
-
Ну и делете наверно мне кажется тоже
-
-
Привет всем. За неделю запутался, читая чат. У нас есть кластер из 2-х машин КХ и 3-х машин ZK. Есть ReplicatedMergeTree, на которую навесили MaterializedView с движком MergeTree. Если данные попали в ReplicatedMergeTree, есть ли гарантия, что они окажутся и в MaterializedView, если все машины живы? Я понимаю, что в случае вылета КХ или ZK последствия могут быть рандомными, но если без вылетов?
-
В MV данные попадут только на той машине где запись, делайте MV реплицируемыми
-
О. Кажется, именно это мы и продолбали. Спасибо. :)
-
Вот тут можно посмотреть про механику https://events.yandex.ru/lib/talks/5800/
-
-
как-то странно, когда сделали 5 машин вместо 2, но при выходе из строя одной последствия рандомные. получается менее устойчиво, нет?
-
Это не 5 вместо 2. Это 2 + 3. Даже при самой крутой и стабильной архитектуре вылет любого сервера может привести порою к рандому, если случится в "удачное" схождение звёзд.
-
Привет всем, у меня тут на мой взгляд страшная ситуация, на 1 из шардов на репликах не совпадают данные. Смотрю логи ошибок вроде нет, может подскажите на что обратить внимание?
-
Насколько я понимаю, поскольку у ClickHouse асинхронная репликация, то при выпадании одной ноды КХ данных потеряется не слишком много (только то, что не успело доехать). А при выпадании ZK ноды вообще ничего страшного не должно происходить, потому что он использует Paxos (или какой-то другой протокол для распределенного консенсуса).
На практике, конечно, это всё стоит проверить :)) -
Спасибо, за ответ, ноя ничего не понял)) делать то что? Как понять на какой из реплик верные данные? Как их восстановить?
-
На той, где их больше, насколько я понимаю
-
А репликация через replicated.... таблицы или детская?
-
Replicated
-
Зукипер есть?
-
Да
-
А как проверяли что не совпадает? Т.е. для всяких replacing и agregating резултат select count() может зависеть от того завершился merge или нет.
-
sum по основным столбцам
-
и заливка остановлена? реплика видит данные с задержкой, если запрос sum идет 10 сек., будут разные результаты
-
Ну там значительно отличается
-
Ничего не стопил пока
-
а что показывает select from system.parts про партции этой таблицы? на обоих репликах
-
Ну количество строк в таблице system.part разное
-
а replication_queue есть запросы на репликацию? странно это все
-
Вот тут куча строк и в поле last_exception connection timeout ошибки
-
-
Друг, спасибо тебе огромное!))))
-
ну значит реплика не может подключится к брату по http (9000) ?
-
Уже все)
-
можно мониторить типа :
'rep_future_parts')
sql="select sum(value) from (select sum(future_parts) as value from system.replicas union all select toUInt64(0) as value)"
;;
'rep_parts_to_check')
sql="select sum(value) from (select sum(parts_to_check) as value from system.replicas union all select toUInt64(0) as value)"
;;
'rep_stalled')
sql="select sum(value) from (select count(*) as value from system.replication_queue where num_tries > 100 union all select toUInt64(0) as value)"
;; -
Ок, спасибо)
-
Joined.
-
Здравствуйте.
Подскажите пожалуйста,
Если гаснет нода zk follower - то clickhouse (если он подключен именно к этой ноде) теряет один пакет и переподключается.
Если гаснет нода zk leader то таблицы переходят в readonly до сообщения в логе ZooKeeper session has expired. Switching to a new session. (60 секунд до этого момента проходит). Что яч делаю не правильно. Подскажите пожалуйста. -
А что не так?
-
Не хочется 60 секундного ридонли
-
ну бывает раз в сто лет так что терпимо
-
А имеет смысл уменьшать zookeeper_session_expiration_check_period ? И чем это грозит?
-
Нет, Зукиперы не сильно часто падают, а минута в RO тоже не так уж и много, легко дозалить данные которые накопились.
-
Joined.
-
Попробовал "insert_quorum" как тут советовали.
В логах каждого сервера некоторое кол-во таких сообщении валится
2018.08.01 15:46:30.776377 [ 420 ] <Error> MetricsDistributed.Distributed.DirectoryMonitor: Code: 286, e.displayText() = DB::Exception: Received from 10.1.2.57:9000. DB::Exception: Quorum for previous write has not been satisfied yet. Status: version: 1
2018.08.01 15:47:21.476415 [ 421 ] <Error> MetricsDistributed.Distributed.DirectoryMonitor: Code: 286, e.displayText() = DB::Exception: Received from 10.1.1.183:9000. DB::Exception: Quorum for previous write has not been satisfied yet. Status: version: 1
2018.08.01 15:47:41.518425 [ 5462 ] <Error> executeQuery: Code: 286, e.displayText() = DB::Exception: Another quorum insert has been already started, e.what() = DB::Exception (from 10.1.1.249:52124) (in query: INSERT INTO MetricsDistributed FORMAT TabSeparated), Stack trace:
2018.08.01 15:47:41.578393 [ 5462 ] <Error> HTTPHandler: Code: 286, e.displayText() = DB::Exception: Another quorum insert has been already started, e.what() = DB::Exception, Stack trace:
И самое непоиятно что появились опять дуюликаты хотя вьюх нету
В коде нашел что транзакция откатывается но откуда тогда дубликаты?
else if (multi_code == ZooKeeperImpl::ZooKeeper::ZNODEEXISTS && failed_op_path == quorum_info.status_path)
{
transaction.rollback();
throw Exception("Another quorum insert has been already started", ErrorCodes::UNSATISFIED_QUORUM_FOR_PREVIOUS_WRITE);
} -
Сообщения фиг с ними, задержки сети или еще что-нибудь в растпеделенной системе пусть будут
Но эти дубликаты в различной вариации меня немного измотали -
>Но эти дубликаты в различной вариации меня немного измотали
я вот читаю который день про ваши дубликаты, и вот чего не могу понять,
вы же сами пишете по нескольку раз, при ошибке, поэтому дубликаты, правильно? -
Да, а как иначе если батч не прошел?
Replaced движок это борьба с последствиями -
Одна причина это вьюхи, от них со скрипом отказались и выкручиваемся без них
-
-
-
Вылез нюанс что если писать асинхронно и стопануть одну из 2 реплик то перестает мержить
-
В свою очередь после Х немержей шард перестает отвечать и кластер полудоступен
Хотя вроде как потеря реплики не должна к такому приводить. -
Ок, сделали синхронную запись, опять 25, при остановке реплики вылезли дубликаты (видимо не только нет атомарности между таблицей и вьюхой но и между репликами)
-
Мы готовы к потерям данных или даже к дубликатам если полкластера легло, но при потере одной двух нод как то не расчитывали что пичаль настигнет
-
insert_quorum придется вернуть в 0
от вьюх отказались, будем сами писаль в несколько таблиц.
ЗЫ я не жалуюсь, я делюсь. Продукт оч быстрый, но есть нюансы при использовании как и везде. Просто эти дубликаты выглядят как серьезная проблема для серьезного использования -
но вы понимаете, что дубликаты replacing может схлопнуть в отдаленном будущем а может и нет, т.е. надо писать запросы правильно к такой таблице чтобы дубликаты скрывать?
-
-
>Да, а как иначе если батч не прошел?
>Replaced движок это борьба с последствиями
>Одна причина это вьюхи, от них со скрипом отказались и
>выкручиваемся без них
все это очень странно, у меня миллиард строк в день, все обвешено вьюхами, проблемы бывают ну раз в году может и то обычно я сам виноват. -
ноду стопали?
-
постоянно и падают и стопаю, я правда не пользуюсь записью через distributed
-
У меня тоже все работало
А как начал тустировать что будет если вдруг нода выпадет так ой -
я могу конечно и это еще попробовать, но мои ошибки которые я тут выкладываю вроде не намекают что это может быть корень проблем
-
тут и тут описал
https://github.com/yandex/ClickHouse/issues/2765
https://github.com/yandex/ClickHouse/issues/2755Deduplication doesn't work if MV exists. #2765Hello, we use Materialized Views a lot. There is one problem with them, if you use batch insert and it passes to main table but was rejected by one of MV, whole insert will return exception. Client will retry send batch and again it can ...
-
Спрашивайте если что нужно дополнительно
-
так а что с:
но вы понимаете, что дубликаты replacing может схлопнуть в отдаленном будущем а может и нет, т.е. надо писать запросы правильно к такой таблице чтобы дубликаты скрывать? -
Так я ответил что этот движок использовать не будем
-
это уже последствия, а не причина
-
Без вьюх дубликатов нет (они есть или с вьюхами или если insest_quorum выставить в 2 например, как я написал выше причина видимо одна, неатомарность вставки со вьюхами (это подтверждено разработикми) и с репликами видимо тоже атомарности нет и в одну проходит а в другую нет)
-
ну все ясно мне, я ни хера не понял.
-
Не совсем понимаю о какой причине речь идет, я не разработчик КХ, точно указать причину мне сложно.
Или вы намекаете что стопать ноду не надо и все будет хорошо? К сожалентю в реальности они постоянно ломаються (сервера я имею в виду) -
Татьяна я искренне пытаюсь подробно ответить на вашии вопросы, переформулируйте пожадуйста если я отвечаю не на то что вы задали
-
-
потому что в первый раз что-то упало.
что-то упало в нашем случае например отказ на вставку из-за медленных мержей,
а они медленный в свою очередь потому как если одна реплика упала то на 2й какие-то танцы происходят
все что я при этом вижу в системных таблицах и логах я выложил в issue -
давайте по пунктам напишу?
-
-
конечно
-
-
вроде как есди блоки одинаковые а они такие то не должно проходить
-
Алексей мой код проверил
-
Вроде бы не нашел явных багов
-
Вставляем точно тот же кусок
-
блок меньше настройки
-
и это работает но только если нет вьюх и нет синхронной репликации как выяснилось
-
-
Я не могу ответить на вопрос о корне проблем. Если бы я знал куда мы не помещаемся то я бы постарался это исправить
-
Вставок около 100 в минуту
-
по 40-50к строк
-
Как я понял с вьюхами проблема известная и она не в настройках и блоках
-
-
-
Пример
1. Вставка в осн таблицу прошла
2. Во вьюху упала
3. Вернули исключение на клиент
4. Клиент перевставил
5. В осн прошла вставка
Бинго у нас дубликаты -
Мне то что я вам выше написал объяснили разработчики
Если это не так то давайте с вами попробуем понять причину и главно ечто делать -
100 можно увеличить как-то до 1000 и проверить?
-
-
так я ж без понятия что и куда вставилось а что и куда нет
если в исключении например будет информация что 1-Т вставилось а Т-П не вставилось и куда (в какую вью или таблицу) то я с удовольствием обработаю
а без этой информации не представляю как. -
при какой частоте вставки можно расчитывать по вашему? попробую повоевать в этом направлении
-
Joined.
-
так то что я по пунктам написал ложное предполажение и дубликаты не из-за этого?
-
пролейте свет пожалуйста
-
Если вы вставляете раз в минуту, то КХ будет помнить про блок примерно 100 минут.
Если вы вставляете раз в секунду, то КХ будет помнить про блок примерно 100 секунд.
Как долго КХ должен помнить про блоки, чтобы вы с уверенностью могли повторять вставку? -
идея понятно
-
спсб
-
помнит распределенная таблица или каждая локальная?
-
-
-
не знаю как ответить но мне пояснили что это не важно
-
(сейчас переделываю на вставку в локальную таблицу, как я понял вставка должна быть в одну и ту же RepilcatedMergeTree таблицу? есть разница на какую реплику? )
-
-
спсб
-
-
судя по тому что нода в ЗК одна то и шарда не важна, тоесть можно переслать на любую ноду кластера
это облегчает -
я тут некопенгаген ))
-
-
Вы перевстявляете в ту же шарду или все равно куда?
-
Joined.
-
я не пользуюсь дедупликацией и вставкой в distibuted поэтому мне параллельно в какой шард и в какую реплику повторять вставку.
-
я вообще не понимаю откуда такие требования к точности в биг дата, вон дремель возращает результат с 99.7% шардов, ну и точность запроса будет 99.9%, да пофиг.
-
если надо 100%, храните в mysql
-
Вроде всё-таки big data не включает в себя потерю данных. Ну т.е. у меня, к примеру, ответное непонимание. Продолбать десять лямов записей? Пф, это же биг дата. :)
-
Спсб за совет. У всех разные кейсы
Я не вижу что хочу чего-то невероятного
Просто пытаюсь разобраться
Если вы уже разобрались я искренне рад
Мне пока до конца не удалось, перебираю варианты -
Я тоже не могу себе позволить такого
Не всем везет -
КХ не гарантирует целостность данных. Там нет Durability (в терминах ACID).
Поэтому потери гарантированы самим дизайном. -
Если эти потери прям фактически гарантированы, стоило бы на главной странице рядом с "Не тормозит" большими буквами добавить "и не сохраняет", раз уж ACID так сурово не соблюдается. Но мне пока думается, что всё менее трагично и D теряется в кейсах, которых можно избежать. Правда, их описания в доке поди найди.
-
хм, а что какая-то буква из ACID соблюдается в КХ ?
кейс очень простой, делаем insert, видим OK, тут же посылаем kill -9 демону КХ, стартуем и не видим проинсерченного. -
Не должно быть такого - после ОК данные должны оказаться хотя бы в кэше файловой системы. Вот если нода целиком внезапно умрет, тогда да.
-
Емнип, неделю назад тут отвечали, что ответ 200 ОК означает таки сохранение на ноде.
-
-
Joined.
-
Юзает кто-нибудь Tableau Server на линуксе в связке с ClickHouse?
-
У меня это говнище нивкакую не заводится
-
Я ОРУ!
-
yandex/ClickHouse was tagged: v18.6.0-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v18.6.0-stable
Release notes:
Auto version update to [18.6.0] [54401]yandex/ClickHouseClickHouse is a free analytic DBMS for big data.
- 02 August 2018 (105 messages)
-
Как же приятно видеть новый тег и сразу чейнджлог к нему!
-
Joined.
-
Господа, пытаюсь получить суммарную скорость чтения с дисков: http://paste.org.ru/?b8oeay
Либо я что-то не понимаю, либо runningDifference как-то странно работает. -
Попробуйте в подзапросе сделать ORDER BY datetime, а уже над результатом подзапроса выполнить runningDifference
-
Хм... Так работает. Осталось сделать, чтоб ещё и для N хостов в IN сработало...
-
Привет, товарищи.
Вопрос: в каком случае КХ будет быстрее искать?
- поиск гуида в строке ( position("guid1,guid2,guid3", "guid2") )
- поиск гуида в массиве строк ( has(["guid1","guid2","guid3"], "guid2") ) -
Привет.
Есть 2 реплики с таблицей ReplicatedMergeTree.
Хочу выполнить удаление партиции: ALTER TABLE table ON CLUSTER cluster DROP PARTITION 'partition'.
Возвращается ошибка "Password required for user default".
Мне понятно что тот сервер, на котором я выполняю запрос не является лидером, но в конфигурации кластера я задал для каждой реплики user и password (к тому же user не называется default). В users.xml так же присутствует используемый пользователь.
Версия Clickhouse 1.1.54388.
Подскажите пожалуйста, в чем может быть проблема? -
Мы в таком случае заменили гуиды на инты (есть отдельный словарь) и используем второй вариант с массивами
-
Тяжело от гуидов уйти к сожалению, все ими пронизано.
-
а в 2 uint64 преобразовать не получится?
-
Второй вариант лучше.
-
как вариант, другими словами 2 uint64 дешевле строкового гуида?
Я просто помню постулаты КХ - храните строками если надо, он справится -
понял.
предложенные преобразования guid -> int коснутся объема данных точно, а производительность сильно улучшит? -
-
спасибо! буду играться. Начну с 2 варианта, как Алексей предложил.
-
Joined.
-
Здравствуйте, а можно ли как-то хранить данные в кх без привязки ко времени?
-
-
Да, можно:
1. не использовать MergeTree (не рекомендуется, скорость запросов не максимальная)
2. создать таблицу с кастомным партиционированием -
Спасибо большое, ребята!
-
Joined.
-
Нет. А можно больше инфы что и где не заводится?
-
-
SELECT
f.date,
s.date
FROM default.rep_price AS f
ANY LEFT JOIN default.rep_price AS s ON date = second.date
Received exception from server (version 18.6.0):
Code: 47. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Unknown identifier: second.date. -
а почему second вместо s?
-
-
-
SELECT *
FROM test1 AS f
ANY LEFT JOIN test2 AS s ON f.id = toUInt32(s.id + 1)
Exception on client:
Code: 32. DB::Exception: Attempt to read after eof: while receiving packet from localhost:9000, 127.0.0.1
А вот так вешается сервер - условие ON - заведомо не выполнимо -
Привет, может кто-нибудь подсказать по подключению mongo-словаря?
В аттрибутах обязательно необходимо перечислить все колонки таблицы, и должен ли быть object_id частью ключа? -
Не подскажите какой официальный способ уменьшить кластер?
-
Например с 8 шард до 6
-
Удаление партиции реплицируется, выполните запрос на любой реплике.
-
-
Друзья. Не подскажите, существует ли быстрый способ переименования столбца?
или копирования столбца в новый стобец с удалением старого? -
Rename вроде был.
-
Вижу только для таблиц.
Для колонок нет. (или невнимательно смотрю) -
-
Ок, спасибо большое
-
Я опустил один важный момент. Конфигурация кластера 2 шарда по 2 реплики. Хотелось одним запросом с любой ноды удалять партицию (одноименная партиция присутствует на обоих шардах).
-
и на любой реплике это не прокатит, реплика должна быть лидером, иначе ошибка отсутствия пароля для пользователя default
-
Я думал уже поправили это, у нас просто нет пароля для default и нет проблем )
-
Ребят, подскажите, диалект hibernate для КХ никто не пилит?
-
"Пропал дом"
-
Я бы попробовал 2 вещи:
1. Руками повставлять в remote таблицы на других серверах, пошардив самому при выборке как-нибудь
2. Попробовать clickhouse-copier, но я сам не пробовал 🙂 -
Уже на 2 нацелились
Попробуем в понедельник
В четверг что-то сцыкотно ))
Спсб -
Joined.
-
Перестать писать в 2-а шарда, а данные из него перекинуть через distributed таблицу (insert into distributed select from local) в оставшиеся
-
Всем привет! В system.parts есть два поля - "partition" и "partition_id", хотя в документации описано только первое, а второе вроде-как добавлено относительно недавно. Отсюда 2 вопроса: есть ли в этом скрытый смысл? Стоит ли ожидать, что "partition_id" будет со временем выпилено?
-
Вот тут в конце немного про разницу есть: https://clickhouse.yandex/docs/ru/operations/table_engines/custom_partitioning_key/
-
-
Благодарю. Если я всё верно понял, что для alter table правильнее использовать значение "partition".
-
Можно и то и то, как удобнее. Если пишете например ALTER TABLE t DROP PARTITION expr, то expr это константное выражение, значение которого должно быть равно значению partition, которую вы хотите дропнуть. Или можно написать ALTER TABLE t DROP PARTITION ID 'id', если вы вытащили id из имён кусков.
-
-
Доброго времени суток! Ребят можете подсказать не могу разобраться, с резервным копированием и восстановлением в КХ. Делаю по вот этой статье https://ruhighload.com/%D0%91%D0%B5%D0%BA%D0%B0%D0%BF+%D0%B8+%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B2+clickhouse. Не могу понять как сделать ATTACH партицийБекап и восстановление в Clickhouse
Как сделать бекап и восстановить данные в Clickhouse
-
Аттач партитион и дата партиции
-
А если у меня так выливается?
-
─partition─┬─table─────────────┬─database───┐
│ 201803 │ test │ production │
│ 201803 │ test │ production │
│ 201804 │ test │ production │
│ 201804 │ test │ production │
│ 201804 │ test │ production │
│ 201805 │ test │ production │
│ 201805 │ test │ production │
│ 201805 │ test │ production │
│ 201805 │ test │ production │
│ 201805 │ test │ production │
│ 201806 │ test │ production │
│ 201806 │ test │ production │
│ 201806 │ test │ production │
│ 201807 │ test │ production │
│ 201807 │ test │ production │
│ 201807 │ test │ production │
│ 201807 │ test │ production │
│ 201807 │ test │ production │
│ 201807 │ test │ production │
│ 201807 │ test │ production │
│ 201808 │ test │ production │
│ 201808 │ test │ production │
│ 201808 │ test │ production │
│ 201808 │ test │ production │
│ 201808 │ test │ production │
│ 201808 │ test │ production │
│ 201808 │ test │ production │
│ 201808 │ test │ production │
│ 201803 │ test_backup │ production │
│ 201804 │ test_backup │ production │
│ 201804 │ test_backup │ production │
│ 201805 │ test_backup │ production │
│ 201805 │ test_backup │ production │
│ 201806 │ test_backup │ production │
│ 201806 │ test_backup │ production │
│ 201806 │ test_backup │ production │
│ 201806 │ test_backup │ production │
│ 201806 │ test_backup │ production │ -
при таком запросе
-
SELECT partition, table, database FROM system.parts WHERE active AND database = 'production';
-
JFYI, в 18й есть регрессия, distinct в MV ломает результат.
https://github.com/yandex/ClickHouse/issues/2795 -
А что не так?
-
Я тут вроде разобрался
-
подскажите что-то поменялось в формате config-file для clickhouse-client?
старый config.xml файл с настройками перестал отрабатывать после обновления с 1.1.54385 на 18.6.54401, вернее <host>clickhouse-srv1</host> подхватывается а <user>|<password> похоже нет. пытается под default подключиться. -
Привет.
В документации Settings сказано, что max_threads "By default, 8".
В исходнике Settings.h иначе — max_threads, 0, "The maximum number of threads to execute the request. By default, it is determined automatically."
В документации бага или таки на каком-то этапе max_threads становится 8 (правда, искал и не нашёл)? -
SELECT *
FROM system.settings
WHERE name = 'max_threads'
Row 1:
──────
name: max_threads
value: 20
changed: 0
description: The maximum number of threads to execute the request. By default, it is determined automatically. -
Ага, значит, документация.
-
host и password применяются из файла, а вот user нет.
так работает
clickhouse-client --config-file ./test-ch.xml --user user
а так не работает
clickhouse-client --config-file ./test-ch.xml
...... DB::Exception: Wrong password for user default.
что не так? -
А нет для словаря функции чтобы вызвать ее по значению атрибута и получить ид?
-
А то сейчас прикрутил словарь к тестовой таблице и понял что условия where надо либо через ид писать либо вызывать dictGetString на колонке и сравнивать
-
в общем случае никак. Для некоторых типов словарей можно сделать таблицу с Engine = Dictionary использовать как таблицу.
Если нужна скорость я бы сделал еще один словарь и там свапнул key -> value. -
:( печаль.
-
А кому не нужна скорость :))) так бы и на постгрес можно остаться
-
а в чем проблема? В любом случае будет медленно
select *, getDict( , key, ) fx
from table
where fx = ....
что этак
select *
from table
where getDict( , key, ) = .... -
что
select *
from table
where key = (select key from dicttable where = ...) -
хотя последнее может и будет быстрее, какой layout у словаря?
-
Flat
-
а ну тогда можно
CREATE TABLE dictTable ( поля) ENGINE = Dictionary('словарь');
мы просто базу создаем
create database dict Engine = Dictionary;
и там все словари будут как таблицы. -
-
-
-
-
-
Joined.
-
-
-
-
-
Added unixodbc as a submodule. (#2789) · yandex/ClickHouse@e6be3df
* Using unixodbc as submodule [#CLICKHOUSE-3] * Using unixodbc as submodule [#CLICKHOUSE-3] * Using unixodbc as submodule [#CLICKHOUSE-3] * Using unixodbc as submodule [#CLICKHOUSE-3] *...
-
-
-
-
то есть в MergeTree не грузит - таблицы в read only, собственно как это поправить можно
-
Joined.
-
пишут на русском, потом переводят на английский
-
а что в логах?
попробуйте SYSTEM DROP DNS CACHE
ну и рестарт всегда помогает -
Всем привет!
пытаюсь заменить influxdb на CH с визуализацией в Grafana - и вот какой возник вопрос:
предположим, есть MergeTree таблица с TimeStamp (DateTime), EventDate (Date) и Millisec (UInt16)
я хочу визуализировать данные с миллисекундной гранулярностью запросом:
SELECT
$timeSeries + Millisec as t,
avg(MyMetricName)
FROM $table
WHERE $timeFilter
GROUP BY t
ORDER BY t
в испекторе получается вот что:
SELECT (intDiv(toUInt32(TimeStamp), 1) * 1) * 1000 + Millisec as t, avg(MyMetricName) FROM myDB.myTable WHERE EventDate BETWEEN toDate(1531719775) AND toDate(1531794372) AND TimeStamp BETWEEN toDateTime(1531719775) AND toDateTime(1531794372) GROUP BY t ORDER BY t -
при zoom in в графане на более ччем часовой промежуток поинты пропадают - скорее всего это связано с "where" выражением - там TimeStamp в стандартном epoch timestamp
-
если убрать where - все рисуется как надо, но ожидаемо выгребает запросом все данные в таблице
-
есть какие-нибудь workaround-ы?
-
спасибо, всё снесли и поставили заново 🙂
покараптились данные в зукипере и кликхаусы после рестарта не стартовали, ругались на зк -
А может с вершины опыта кто-то может подсказать: мы запустили кластер с шардируемой ReplicatedMergeTree таблицей, но реплика каждого шарда пока в единственном экземлпяре. Зукиперы тоже работают как задел на ближайшее будущее.
Можно ли будет потом подключить шардам реплики, чтобы они как бы стянули данные с шард и стали полными репликами? Какова процедура добавления реплик, когда была раньше всего одна? -
Просто создать таблицу, правильно прописав путь в зукипере
-
Благодарю
-
Создать так же как и первые таблицы. А новая реплика сама подтянет данные, в самом зукипере ничего не надо менять
-
сделайте zoomIN до проблемы и посмотри какой select генерируется, далее запустить руками в CH, если он ничего не отдает то вот и причина. Может вы попадаете в промежуток где графана ожидает данные, а и нет. например вы собираете данные данные раз в сутки а при zoomin у вас отфильтруется только 8 часов(как пример)
- 03 August 2018 (164 messages)
-
Joined.
-
Привет всем!
Кто-то пользовался настройкой target-blacklist graphite-clickhouse ? -
Спасибо, решено заменой на where TimeStamp BETWEEN $from AND $to
Данные статичные за июль 2018 -
-
А почему, если не секрет, хотите уйти от influx?
-
Боттлнеки по цпу на больших выборках
-
Ну и СН видится мне пока более перспективным с точки зрения возможностей по агрегации/аналитике
-
Спасибо
-
Можно ли с ее помощью скрыть саму метрику из поиска?
-
Добрый день! Зарегистрировался на мероприятие. Должно ли прийти подтверждение?
-
Я недели две ждал апрува, иногда в самый последний день апрув прилетает.
-
печально. Надо как-то на работе порешать вопрос с отсутствием (я не из Питера), а времени уже остается мало
-
Я сам с Питера и вот в Москву так ездил ) 50% на 50%. Апрув пришел за день до митапа, но в компании были наготове покупать билеты и согласовали командировку.
-
В той же ситуации, только из Мск ) Очень хотелось бы получить комментарии от сотрудников Яндекса
-
больше вопросов было только в анкете jug.ru для людей которые потратили по 50к чтобы получить свое видео
-
-
Коллеги, добрый день!
А у кого-то удавалось подключить внешний словарь в виде api через http?
Я прописал все конфиги, есть api, которая возвращает json. Делаю запрос к словарю и в итоге возвращается ошибка вида:
Code: 27. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Cannot parse input: expected { before: [{"publisher_id": 999, "id": 1}, {"publisher_id": 5, "id": 2}, {"publisher_id": 756, "id": 3}]: (at row 1)
Т.е. КХ видит api, получает из неё данные, но не может переварить результат. Я конфигах указывал и JSON и JSONEachRow. Ничего не помогает. -
1) то что видно - это не JSONEachRow точно
2) дайте весь ответ от API и конфиг словаря -
Запрос: select dictGetString('positions_publishers', 'publisher_id', toUInt64(2))
Ответ:
Received exception from server (version 1.1.54370):
Code: 85. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Format JSON is not suitable for input.
Конфиг:
<dictionary>
<name>positions_publishers</name>
<source>
<http>
<url>http://localhost:8000/campaigns/api/clickhouse/get_publishers</url>
<format>JSON</format>
</http>
</source>
<layout>
<flat/>
</layout>
<lifetime>
<min>3</min>
<max>7</max>
</lifetime>
<structure>
<id>
<name>id</name>
</id>
<attribute>
<name>publisher_id</name>
<type>String</type>
<null_value>0</null_value>
</attribute>
</structure>
</dictionary> -
Как минимум publisher_id у вас не String
-
Об это я споткнулся, когда подключал другой словарь из Postgres через ODBC. В источнике id'шник типа integer, ну и логично было указать в конфиге Int32. Прописал, сохранил, делаю запрос - ошибка на какое-то нессответствие типов. Пробовал разные варианты для этого атрибута: (U)Int16, (U)Int32, (U)Int64. Всё время была ошибка. Помогло только String. Хотя в источнике этот атрибут с типом integer.
-
DB::Exception: Format JSON is not suitable for input.
-
вам сервер намекает
-
что format JSON нельзя использовать для input
-
-
ммм, так стало быть, КХ не сможет прочитать данные из API?
-
может, если API отдает данные в формате JSONEachRow
-
Cannot parse input: expected { before: [{"publisher_id": 999, "id": 1}, {"publisher_id": 5, "id": 2}, {"publisher_id": 756, "id": 3}]: (at row 1)
-
не должно быть [ вначале
-
и разделителем данных должен быть перенос строки
-
-
да и вообще нет смысла отдавать весь массив, нужно отдавать один запрашиваемый элемент по ключу POST запроса
-
select dictGetString('positions_publishers', 'publisher_id', toUInt64(2)) -> {"publisher_id": 5, "id": 2}
-
В идеале хотелось бы весь словарь хранить в памяти (layout - flat). При схеме "один запрос к словарю"-"одно обращение к api", если я правильно понимаю, будет много ненужного обращения к api. Т.е. при вставке миллионов строк для обогащения атрибутом publisher_id будут сделаны миллионы запросов к api. Зачем, ведь словарь же можно и памяти хранить.
-
да, лучше все держать в памяти, если данных не сильно много то это вполне терпимо
-
извините, не обратил внимание что у вас flat. Да, тогда есть смысл весь массив отдать
-
он массив должен быть в одном из допустимых для input форматов
-
В общем, не получилось. Придётся брать данные по ODBC из самой postgres.
Буду признателен, если кто-нибудь поделется своим решением по поводу api и json. -
а что конкретно не получилось?
-
Победить сообщение "Cannot parse input: expected { before:" при обращении к словарю.
Дальше после этого сообщения идёт содержимое ответа api, вот ведь оно, дошло сообщение api. Но я не понимаю почему КХ не может разобрать ответ. -
Эта ошибка возникает при обращении к словарю или при релоаде словаря?
-
При обращении.
-
-
-
Всем привет! Прошу помощи!
Code: 47, e.displayText() = DB::Exception: Unknown identifier: createdAt, e.what() = DB::Exception
При SELECT * FROM coupons WHERE (couponCode = '0200000001') ORDER BY createdAt DESC FORMAT JSON
запрос кидаю черех smi2/phpClickHouse
Ошибка вылетает раз в 1-3 запроса, остальные отрабатывают норм, реплик нету, в чём проблема может быть? -
-
-
-
-
-
-
-
$client->verbose(); вам в помошь, можно попробовать просто через консольный curl
-
похоже, придётся дебажить пхп клиент
-
-
-
-
Было бы смешно, если бы не было так грустно)))
-
-
Видимо API все таки возвращает JSON, а не JSONEachRow.
Мы у себя добились JSONEachRow с помощью реализации кастомного форматтера для ответа из API.
Если ваш API возвращает все таки JSONEachRow - попробуйте сделать RELOAD словаря и посмотреть в системной таблице словарей последнюю ошибку. -
Ну и в конфигурации словаря соответственно надо проверить, что указан формат JSONEachRow
-
Доброго дня всем!
Возникла ситуация: кончилось место на диске.
Этот факт был отмечен в логах clickhouse, в то время, как он сам перестал отвечать на попытки подключиться к нему.
Потом место мы освободили, сервер перезапустили, но clickhouse все равно на попытки подключиться отвечает:
ClickHouse client version 1.1.54236.
Connecting to localhost:9000.
Code: 210. DB::NetException: Connection refused: (localhost:9000, ::1)
В чем может быть проблема? -
-
Проверьте DNS - что IP всегда сервера, и что database('name') - всегда указан, может есть еще база с такой таблицей
SELECT * FROM coupons.coupons WHERE (couponCode = '0200000001') ORDER BY createdAt
И самый простой вариант - это через простой Curl подергать CH без PHP -
Смотрите что КХ пишет в логах, возможно он ещё не стартанул
-
Joined.
-
Мне удалось буквально только что сделать так, что бы КХ понимал простой json. Т.е. API отдаёт {'publisher_id': '999', 'id': '1'} и запрос SELECT dictGetString('positions_publishers', 'publisher_id', toUInt64(1)) отрабатывает без ошибки и возвращает 999.
А если на стороне api формирую список словарей (python) и отдаю, то опять возникает ошибка "Cannot parse input: expected { before: ...".
Т.е., видимо, что-то на стороне api при конвертировании питоновского списка словарей не так. -
Вот то, что клик пишет в лог при запуске
-
-
Попробуйте через Postman обратиться к своему API и посмотреть какие данные возвращаются. Если это список объектов, типа: [{...}, {...}, ...], то в этом и есть проблема, т.к. с этим форматом Clickhouse не работает. Надо избавляться от [] и использовать разделитель перенос строки, вместо запятой.
-
используйте TSV или CSV вместо json
-
select 999 publisher_id, 1 id
union all
select 5 publisher_id, 2 id
union all
select 756 publisher_id, 3 id
format JSONEachRow
вот что ожидает КХ
{"publisher_id":999,"id":1}
{"publisher_id":756,"id":3}
{"publisher_id":5,"id":2} -
Обычный json слишком медленный для парсинга, видимо разработчики тратить время на него не хотят.
-
Получилось!
-
-
то что сейчас есть https://clickhouse.yandex/docs/ru/operations/table_engines/dictionary/, не очевидно имхо. Я бы внес изменения даже как PR, но хотя бы понять куда копать.
-
Сейчас вышлю
-
Мой api в итоге отправляет такой ответ b'[{"publisher_id": "999", "id": "1"}, {"publisher_id": "5", "id": "2"}, {"publisher_id": "756", "id": "3"}]'
-
Надо было просто убрать квадратные скобки
-
Спасибо!
-
-
Инструкция писалась для себя, наспех зареплейсил свои внутреннии названия в ней, так что может сразу что-то не сойтись, но смысл, надеюсь, должен быть понятным.
-
Прочекал всё, попробовал всё дропнуть и заново создать, теперь
Code: 49, e.displayText() = DB::Exception: Could not find a column of minimum size in MergeTree, part /var/lib/clickhouse/data/coupon/coupons/20180803_20180803_1_6_1/, e.what() = DB::Exception -
-
Привет.
После обновления кластера до актуальной версии на одной из реплик появилась проблема с мерджем очень старых данных. Мердж идет, в итоге возникает ошибка - и он повторяется заново, в цикле. Почему-то с другой реплики этот part не скачивается. На второй реплике этого шарда никаких проблем нет.
2018.08.03 16:56:02.583570 [ 12 ] <Error> SrcData.TTStatBase (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
Вот выдержка из лога по этому треду.
2018.08.03 16:56:02.352540 [ 12 ] <Debug> SrcData.TTStatBase (MergerMutator): Merge sorted 118552713 rows, containing 166 columns (6 merged, 160 gathered) in 234.24 sec., 506113.87 rows/sec., 649.20 MB/sec.
2018.08.03 16:56:02.356438 [ 12 ] <Trace> SrcData.TTStatBase (Data): Renaming temporary part tmp_merge_201709_63076_64611_5 to 201709_63076_64611_5.
2018.08.03 16:56:02.356510 [ 12 ] <Trace> SrcData.TTStatBase (MergerMutator): Merged 3 parts: from 201709_63076_63675_4 to 201709_64197_64611_4
2018.08.03 16:56:02.583501 [ 12 ] <Debug> SrcData.TTStatBase (Data): Undoing transaction. Removing parts: 201709_63076_64611_5.
2018.08.03 16:56:02.583570 [ 12 ] <Error> SrcData.TTStatBase (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
2018.08.03 16:56:02.583670 [ 12 ] <Debug> MemoryTracker: Peak memory usage: 39.87 MiB.
2018.08.03 16:56:02.753503 [ 12 ] <Debug> SrcData.TTStatBase (StorageReplicatedMergeTree): Part 201709_63076_64611_5 (state Outdated) should be deleted after previous attempt before fetch
2018.08.03 16:56:02.753556 [ 12 ] <Trace> SrcData.TTStatBase (StorageReplicatedMergeTree): Executing log entry to merge parts 201709_63076_63675_4, 201709_63676_64196_4, 201709_64197_64611_4 to 201709_63076_64611_5
2018.08.03 16:56:02.753587 [ 22 ] <Trace> SrcData.TTStatBase (Data): Found 1 old parts to remove.
2018.08.03 16:56:02.753614 [ 12 ] <Debug> SrcData.TTStatBase (MergerMutator): Merging 3 parts: from 201709_63076_63675_4 to 201709_64197_64611_4 into tmp_merge_201709_63076_64611_5
2018.08.03 16:56:02.753622 [ 22 ] <Debug> SrcData.TTStatBase (StorageReplicatedMergeTree): Removing 1 old parts from ZooKeeper
2018.08.03 16:56:02.755014 [ 12 ] <Debug> SrcData.TTStatBase (MergerMutator): Selected MergeAlgorithm: Vertical
2018.08.03 16:56:02.755235 [ 12 ] <Trace> MergeTreeBlockInputStream: Reading 1 ranges from part 201709_63076_63675_4, approx. 46530560 rows starting from 0 -
2018.08.03 16:56:02.755405 [ 12 ] <Trace> MergeTreeBlockInputStream: Reading 1 ranges from part 201709_63676_64196_4, approx. 40615936 rows starting from 0
2018.08.03 16:56:02.755483 [ 12 ] <Trace> MergeTreeBlockInputStream: Reading 1 ranges from part 201709_64197_64611_4, approx. 31416320 rows starting from 0 -
Seems like the problem was 2 instances of clickhouse-server running at the same time. Not sure how I got to this scenario...
https://groups.google.com/forum/#!topic/clickhouse/chYoOYgcxoQ
тут чате тоже есть про Could not find a column of minimum size -
Что с этим можно сделать? Рестарт CH не помогает. Версии CH на репликах сейчас идентичны, но в процессе апдейта некоторое время были разными, конечно.
-
Спасибо. Да, тут гораздо больше надо действий чем написано в доке.
-
Подтверждения присылаются не сразу, а периодически - сразу пачкой.
-
а в течение какого периода можно ожидать?
-
Да, в 18.6.0 попали изменения с фильтрацией connection string. Поставьте пока 18.5.1.
-
До 15 августа.
-
спасибо
-
спасибо
-
Кто-нибудь использует alias для JOIN?
-
Возвращает не совсем то, что ожидается
-
При этом если указать так
SELECT
*, d.*, d.values
Тогда d.values вернёт то что нужно. Выглядит как баг -
-
Звездочка будет переделываться, сейчас работает странно в джойнах... пока лучше явно указывать нужные колонки
-
Просто совсем недавно, условно месяц назад, такого поведения не было
-
-
Мне создать issue?
-
Еще раз всем привет, я пока не смог решить проблему, но обнаружил интересный эффект. Если я залезу в /var/lib/clickhouse/data и перенесу папку с данными самой активно пользуемой базы куда-нибудь, то проблем при запуске не возникает и в логе появляются строки:
2013.05.15 04:02:00.275454 [ 1 ] <Information> Application: Listening http://[::0.0.0.0]:8123
2013.05.15 04:02:00.275647 [ 1 ] <Information> Application: Listening tcp: [::0.0.0.0]:9000
2013.05.15 04:02:00.275825 [ 1 ] <Information> Application: Listening interserver: [::0.0.0.0]:9009
2013.05.15 04:02:00.276018 [ 1 ] <Information> Application: Ready for connections.
Если вернуть на место, проблемы возвращаются. Что это может значить? -
Вот очень похожее https://github.com/yandex/ClickHouse/issues/2786 и там даже PR предложили.Unexpected SELECT * with Join #2786
Steps to reproduce the behavior SELECT * FROM (SELECT 1 AS id, 2 AS value) ANY INNER JOIN (SELECT 1 AS id, 2 AS values) USING id; Expected Result 1 2 2 Actual Result 1 2
-
А в логе больше ничего нет, кроме того, что ты приложил?
-
Нет
-
На этом месте он задумываетсяя (если запускать клик из консли) и при попытке остановить его (ctrl+c) пишет в лог
<Information> Application: Received termination signal (Interrupt)
И не останавливается. При повторном нажатии пишет
2013.05.15 04:08:22.359170 [ 5 ] <Information> Application: Received termination signal (Interrupt)
2013.05.15 04:08:22.359205 [ 5 ] <Information> Application: Received second signal Interrupt. Immediately terminate.
И после этого уже умирает -
-
Спасибо, помогло
-
Joined.
-
-
Самая нагруженная таблица - energomonitor
-
-
-
-
-
-
fsck делали?
-
что sar -d 1 100
показывает в момент старта КХ? -
Хм, это странно. Вопрос тогда снимается, пока мы версию не обновим.
-
Сделаем
-
Это где, я не нашел такого
-
это команда/софтина в юниксе, показывает нагрузку, в данном случае -d диски
-
я подозреваю что вы просто не дожидаетесь пока КХ прочитает с диска файлы, или с дисками проблемы и будут запредельные числа в столбиках svctm и await
15:24:40 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
15:24:40 dev8-0 0.00 0.00 0.00 0.00 0.40 0.00 0.00 40.00
15:24:40 dev8-16 0.00 0.00 0.00 0.00 0.40 0.00 0.00 40.00 -
-
Впринципе да, последняя запись в логе, что он как раз начинает грузить табличку. На текущей версии там идёт логирование, которое как-то описывает процесс, было бы более наглядно.
-
и fsck надо сделать, потому что там возможно получились бесконечные файлы из нулей в конце.
-
Вопрос по нативному протоколу и пакету Data. В клиенте в Connection::receiveData есть readStringBinary(external_table_name, *in). Но на сервере TCPHandler::sendData туда пишет пустую строку: writeStringBinary("", *out).
Есть ли в этом какой-то смысл? Или остаток непригодившейся фичи? -
-
Привет
Если пользоваться хттп-словарем, насколько сильно заметно разницу в производительности по сравнению в файлом? хттп-сервис “рядом”, скорость “не ограничена”. -
Кэшируются ли такие словари?
-
-
-
В зависимости от типа — cached/hashed
-
спасибо
-
с файлом? в смысле словарь vs КХ таблица?
словарь быстрее для рандомного доступа -
Joined.
-
Ок, спасибо.
-
А есть возможность попросить о фиче в новый табикс? Очень не хватает возможности выносить окощке результата в другое окно, чтобы былоа как в хроме, когда дебаггер и страница в разных окнах. Ну или показывать его справа, как предпросмотр сейчас сделан.
Не хватает высоты окна редактирования :( -
Нарисуйте issue сделаю)
-
спасибо
-
-
Нет((
-
Joined.
-
ПОдскажите как сделать запрос с like вида
SELECT
Time, OpenTime, CloseTime
FROM db.test
Where Time LIKE('2018-08-01%’)
ORDER BY (Time, TimeMillisecond) DESC -
Как-то так)
SELECT
Time, OpenTime, CloseTime
FROM db.test
Where Time LIKE '2018-08-01%’
ORDER BY (Time, TimeMillisecond) DESC -
вот это поворот
-
получаю - Error running query: Code: 43, e.displayText() = DB::Exception: Illegal type DateTime of argument of function like, e.what() = DB::Exception
-
Он ругается на тип колонки Time. Можно кастануть ее в строку:
where toString(Time) like '2018-08-01 %' -
спасибо!
-
это удар по перфомансу.
Time between '2018-08-01 00:00:00' and '2018-08-01 23:59:59'
или
toYYYYMMDD(Time) = '2018-08-01' -
вот-вот, как раз хотел спросить, какой тип у колонки Time
-
>toYYYYMMDD(Time) = '2018-08-01'
и удивительно, КХ единственная известная мне БД, где такой вариант заооптимизирован, остальные субд не парятся разворотом хешфункций. -
Если судить по названию, кажется, что функция должна вернуть '20180801')
Я такой, честно говоря, даже не знал и гонял between -
toDate(Time)
-
а ну правильно, а toYYYYMMDD видимо для кастомного партиционирования сделали
select * from (select toDateTime('2018-01-01 01:01:01') a)
where
toYYYYMMDD(a) = 20180101 and
toDate(a) = '2018-01-01'
я тоже везде пишу between, но вообще-то индекс работает с toYYYYMMDD и с toDate
отбрасывание партиций еще страннее, партиционировали скажем по floor(x/100), у каждой партиции есть атрибуты max(x) и min(x), поэтому в запросе для оптимизации выбора партиции пишем where x=5, вместо привычных мне floor(x/100)= floor(5/100), это взрывает мне мозг. -
Пришлось много менять в UI/ux, все переделывать - но мне кажется лучше получается, "подразню" скином сравнением https://monosnap.com/file/1kn68QAl34wPAc2Jl3mWMi4i0IMIZw
-
-
👍
-
Робяты, если у меня в dictionary внешнем (Postgres через ODBC) есть поле Timestamp, которое так же может быть NULL. Как его правильно оформить в <attribute></attribute> что бы не ругался? Ну и видимо конвертация нужна. Использовать <expression></expression> или есть какой то другой идиоматический способ?
-
<null_value>0000-00-00 00:00:00</null_value>
-
-
Посмотрите также expression:
https://clickhouse.yandex/docs/ru/single/#_115
Может быть можно подставить COALESCE(Timestamp, ...) - 04 August 2018 (19 messages)
-
Joined.
-
Он скорее как бэкэнд для чего то что можно назвать tsdb. А так на Вики вообще мало баз самих больше 50 только в opensource
-
Joined.
-
Добрый день.
Столкнулся с ошибкой и не понимаю куда рыть дальше. Помогите пожалуйста понять:
Создаю вьюху
CREATE MATERIALIZED VIEW IF NOT EXISTS db1.r_test_transactions ON CLUSTER comparatio_cloud
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/db1/tables/r_test_transactions', '{replica}', DATE, (ED1_ID, CO1_ID), 8192, ED1_UPLOAD_TIMESTAMP) AS
SELECT *
FROM db1.rtest_transactions
┌─host────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ ch-srv1 │ 9000 │ 0 │ │ 1 │ 0 │
│ ch-srv2 │ 9000 │ 0 │ │ 0 │ 0 │
└─────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
2 rows in set. Elapsed: 0.108 sec.
Вставляю данные
ip-172-31-16-11.us-west-2.compute.internal :) insert into db1.rtest_transactions select * from db1.rtest_transactions;
INSERT INTO db1.rtest_transactions SELECT *
FROM db1.rtest_transactions
Ok.
0 rows in set. Elapsed: 0.001 sec.
на втором сервере делаю ip-172-31-16-10.us-west-2.compute.internal :) optimize table db1.r_test_transactions;
OPTIMIZE TABLE db1.r_test_transactions
Received exception from server (version 18.6.0):
Code: 194. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Received from ch-srv2:9000, 172.31.16.11. DB::Exception: Password required for user default.
0 rows in set. Elapsed: 0.079 sec. -
-
Добрый вечер! У меня в Зукипере, с которым работает только КХ, накопилось уже 11 лог-файлов, хотя в конфиге зукипера указано ротировать по 10 (autopurge.snapRetainCount).
root@east-dwarf-zk1:/var/zookeeper/logs/version-2# ls -lh
total 19G
-rw-r--r-- 1 zookeeper zookeeper 1.2G Aug 3 09:43 log.10019933c
-rw-r--r-- 1 zookeeper zookeeper 1.7G Aug 3 15:51 log.10030917f
-rw-r--r-- 1 zookeeper zookeeper 2.1G Aug 3 23:25 log.100519d74
-rw-r--r-- 1 zookeeper zookeeper 2.3G Aug 4 03:52 log.1007ad569
-rw-r--r-- 1 zookeeper zookeeper 2.3G Aug 4 07:40 log.100a742c0
-rw-r--r-- 1 zookeeper zookeeper 1.7G Aug 4 10:07 log.100d4c983
-rw-r--r-- 1 zookeeper zookeeper 2.3G Aug 4 12:43 log.100f41aa2
-rw-r--r-- 1 zookeeper zookeeper 1.3G Aug 4 14:52 log.10120bd50
-rw-r--r-- 1 zookeeper zookeeper 1.7G Aug 4 17:30 log.10139afc5
-rw-r--r-- 1 zookeeper zookeeper 1.3G Aug 4 19:28 log.1015a31d4
-rw-r--r-- 1 zookeeper zookeeper 1.9G Aug 4 22:12 log.10173df82
root@east-dwarf-zk1:/var/zookeeper/logs/version-2# cat /opt/zookeeper/conf/zoo.cfg
autopurge.purgeInterval=1
maxSessionTimeout=60000000
dataDir=/var/zookeeper/data
4lw.commands.whitelist=*
syncLimit=10
dataLogDir=/var/zookeeper/logs
reconfigEnabled=true
leaderServes=yes
standaloneEnabled=false
skipACL=yes
autopurge.snapRetainCount=10
tickTime=2000
initLimit=30000
snapCount=3000000
preAllocSize=131072
maxClientCnxns=2000
dynamicConfigFile=/opt/zookeeper/conf/zoo.cfg.dynamic.100000000
Подскажите, плиз, нормальная ли это ситуация? Зукиперы запускались с такими конфигами, ничего после запуска не дописывалось, т.е. всё по идее должно быть применено. -
-
Joined.
-
Снепшоты и логи не одно и тоже.
-
При этом зукипер видит настройки. Версия 3.5.3.
2018-08-02 23:06:05,104 [myid:1] - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 10
2018-08-02 23:06:05,112 [myid:1] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1 -
Это уже что-то) Так логи можно просто > logfile занулять, или даже просто удалять?
-
Коллеги, подскажите: хочу подключить коллекцию mongodb как внешний словарь. В коллекции есть поле-массив строк, но, как я понял, поддержка Array() во внешних словарях не реализована. В целом, меня бы устроило записывать конкатенацию строк, но возможно ли это реализовать? Через expression? Не нашел в каком виде они задаются.
-
# systemctl status zookeeper
● zookeeper.service - ZooKeeper Service
Loaded: loaded (/etc/systemd/system/zookeeper.service; enabled)
Active: active (running) since Thu 2018-08-02 23:45:43 MSK; 1 day 22h ago
Docs: http://zookeeper.apache.org
Main PID: 13115 (java)
CGroup: /system.slice/zookeeper.service
└─13115 /usr/bin/java -cp $ZOOCFGDIR:/opt/zookeeper/zookeeper-3.5.3-beta.jar:/opt/zookeeper/lib:/opt/zookeeper/lib/slf4j-log4j12-1.7.5.jar:/opt/zookeeper/lib/slf4j-api-1.7.5.jar:/opt/zookeep...
Aug 04 15:45:44 east-dwarf-zk1: java[13115]: Removing file: 2 авг. 2018 г., 23:45:44 /var/zookeeper/data/version-2/snapshot.0
Aug 04 17:45:43 east-dwarf-zk1: java[13115]: Removing file: 2 авг. 2018 г., 23:45:44 /var/zookeeper/data/version-2/snapshot.100000000
Aug 04 19:45:43 east-dwarf-zk1: java[13115]: Removing file: 3 авг. 2018 г., 5:15:13 /var/zookeeper/logs/version-2/log.100000001
Aug 04 19:45:44 east-dwarf-zk1: java[13115]: Removing file: 3 авг. 2018 г., 5:15:13 /var/zookeeper/data/version-2/snapshot.10019933a
а он, похоже, всё же что-то удаляет. помониторю ещё. -
Нет, expression в Mongo словарях не поддерживается.
Я думаю, это несложно добавить. Надо смотреть в MongoDBDictionarySource.cpp,
функция createCursor.
Для этого нужен человек, который чуть-чуть знает C++ (может пересобирать, перезапускать ClickHouse с mongo словарём). -
благодарю
-
ура, ложная тревога, всё ротируется) только что процесс прошёл. будет +1 файл, то есть если
autopurge.snapRetainCount=10
то будет 11 файлов всегда, где 11 - в который сейчас пишется
cat /var/log/zookeeper-logger/zookeeper.log | grep -i Removing
2018-08-04 15:45:44,676 [myid:1] - INFO [PurgeTask:PurgeTxnLog@154] - Removing file: 2 авг. 2018 г., 23:45:44 /var/zookeeper/data/version-2/snapshot.0
2018-08-04 17:45:43,994 [myid:1] - INFO [PurgeTask:PurgeTxnLog@154] - Removing file: 2 авг. 2018 г., 23:45:44 /var/zookeeper/data/version-2/snapshot.100000000
2018-08-04 19:45:43,994 [myid:1] - INFO [PurgeTask:PurgeTxnLog@154] - Removing file: 3 авг. 2018 г., 5:15:13 /var/zookeeper/logs/version-2/log.100000001
2018-08-04 19:45:44,038 [myid:1] - INFO [PurgeTask:PurgeTxnLog@154] - Removing file: 3 авг. 2018 г., 5:15:13 /var/zookeeper/data/version-2/snapshot.10019933a
2018-08-04 22:45:44,012 [myid:1] - INFO [PurgeTask:PurgeTxnLog@154] - Removing file: 3 авг. 2018 г., 9:43:06 /var/zookeeper/logs/version-2/log.10019933c
2018-08-04 22:45:44,042 [myid:1] - INFO [PurgeTask:PurgeTxnLog@154] - Removing file: 3 авг. 2018 г., 9:43:06 /var/zookeeper/data/version-2/snapshot.10030916a -
Для default пароль не задавайте, это поведение нужно поправить, считайте что пока это фича такая.
-
-
- 05 August 2018 (35 messages)
-
Что нужно знать об архитектуре 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. - Как диагностировать…
-
-
-
Joined.
-
Всем привет. Возник вопрос при select ... where text like %localhost%. Вот так работает. А вот так уже нет. ....where text like %Localhost%. Заранее спасибо.
-
-
Собсно, кейс там во всех функциях важен, учитывайте это.
-
Что скажете по поводу lower(text) like ...?
-
Я предпочитаю регулярками разруливать. Но разумнее попробовать как так, так и эдак, выбрать то, что подходит.
-
Спасибо
-
Joined.
-
Joined.
-
Спасибо! да, все получилось!
-
Ребят, а еще такой вопрос. У меня справочники, которые надо в JOIN по всякому использовать. Их структура чуть сложнее чем (id, name). Если я их как TinyLog буду хранить, это ведь нормально? Меня просто в документации смутило - жирным "Индексы не поддерживаются. ". Это ведь не страшно? значения колонок ведь тоже хранятся на диске в отсортированном виде? И доступ к данным в такой таблице быстрый?
-
-
-
-
Ну и еще один вопрос. Если у меня есть таблица-полу-справочник (больше 1 млн записей), в которых регулярно происходят обновления атрибутов. Я ее объявляю таким образом.
CREATE TABLE runner_catalog
(
selection_id UInt64,
runner_name String,
handicap UInt64,
sort_priority UInt8,
version UInt64
)
ENGINE = ReplacingMergeTree(version)
PARTITION BY intHash64(selection_id)
ORDER BY (selection_id, runner_name);
Я все правильно делаю? В качестве первичного ключа исползьую selection_id. Но из документации, не совсем понял зачем указывать ORDER BY. -
-
Joined.
-
Секция partition by - это не первичный ключ, это ключ разбиения на секции. В случае со словарем подозреваю, что вам не нужен партишионинг
-
А то, что вы называете первичным ключем - это секция order by (при этом это все же не совсем первичный ключ, это ключ сортировки)
-
-
И да, записи с одним ключем будут повторяться в какие- то моменты времени. Это решается либо вызовом optimize, либо запросом с группировкой
-
-
Joined.
-
А есть следующий уровень? =)
У меня нездоровый, можно даже сказать, академический, интерес к представлению данных.
На 10:55 Алексей рассказывает "Как работает индекс". Он упоминает файлы индекса (primary.idx), засечек (.mrk) и данных (.bin). С кем можно обсудить формат этих файлов?
https://www.youtube.com/watch?v=PLMSA_gDdyM&t=655Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)РИТ++ 2017, Backend Conf Зал Сан-Паулу, 6 июня, 15:00 Тезисы: http://backendconf.ru/2017/abstracts/2803.html ClickHouse - высокопроизводительная аналитическа...
-
-
-
зато они никогда не введут в заблуждение, даже невольно
-
@fediq https://events.yandex.ru/lib/talks/5800/
Вот хороший обзор внутренностей MergeTree движка -
Уже определили сумму которую готовы выложить за прекрасные новые знания?
-
open ! = free
-
-
Спасибо! Посмотрю.
- 06 August 2018 (138 messages)
-
Спасибо! Помогло. Только жаль, что это нигде в документации не описано...
-
Добрый день.
Может еще кто то знает еще одна ошибка
Очистка Materialized View работает только на том сервере, где была создана, на любых других выходит ошибка:
ip-172-31-16-10.us-west-2.compute.internal :) truncate table db1.r_test_transactions;
TRUNCATE TABLE db1.r_test_transactions
Received exception from server (version 18.6.0):
Code: 48. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Can't proxy this query. Unsupported query type.
0 rows in set. Elapsed: 0.080 sec.
А тут Materialized View была создана и все работает:
ip-172-31-16-11.us-west-2.compute.internal :) truncate table db1.r_test_transactions
:-] ;
TRUNCATE TABLE db1.r_test_transactions
Ok.
0 rows in set. Elapsed: 0.047 sec.
Это ошибка CH или я опять где-то что то не так делаю? -
Подскажите пожалуйста, ClickHouse не позволяет создавать таблицы с одинаковыми наименованием столбцов? engine = log, Хотела создать таблицу, которая имеет пару одинаковых наименования полей как в ранее созданных таблиц, тогда выдает ошибку DB::Exception: Column ID already exists.
-
Это из за того что движок LOG или в целом clickhouse не позволяет повторение наименование столбцов
-
новичок в ClickHouse, подскажите плиз не моге найти инфу
-
одинаковые столбцы это как?
Это вообще законно? -
А какая бд позволяет?
-
У меня ранее скажем создана таблица "A" с колонками (id Int32, Name String) engine = log, и скажем я пытаюсь создать таблицу "B" с колонками ( id Int32, City String) engine = log
-
и тогда у меня возникает ошибка DB::Exception: Column ID already exists.
-
Это простой пример
-
Кажется я поняла в чем причина
-
-
А это "фича" и её нужно поправить
-
Плюсую интерес к причине.
-
-
-
-
-
А если select one, select 2 as ne_one...?
-
-
-
-
Joined.
-
Здравствуйте
Кто-то сталкивался с подобной проблемой: "Poco::Exception. Code: 1000 ... Malformed message: Field value too long/no CRLF found"?
Отправляю external_data через curl. Передаю список. Если длинной менее 1000, все ок. Больше - ошибка
Через клиент все работает без проблем. -
привет всем, а у кого-то есть пример как залить сsv в кликхаус на golang?
-
А почему бы просто через хттп запрос не лить?
-
-
???)
-
-
я знаю, спасибо) Просто странный вопрос от вас)
-
Спасибо, хотел просто ссылку на готовый пример или вроде того, чтобы не писать самому, не смог найти на просторах(
-
Пост запрос в теле цсв а урл "/query=insert into TABLENANE format csv"
-
👍
-
-
-
Всем доброго дня! Ребят подскажите или киньте ссылочку где можно почитать, каким способом кроме пересоздания таблицы можно изменить параметры внутри Engine? Есть таблица с типом SummingMergeTree с явным указанием колонок для суммирования, нужно добавить еще одну колонку в таблицу и включить её в колонки для суммирования! Спасибо!
-
А лучше всего как убрать с Engine явно заданные колонки, чтобы остался просто ключ по которому будет идти суммирование
-
никак
-
Спасибо!
-
Не то что поменять движок, даже набор колонок в ПК нельзя поменять
-
Читал в этом чате что в конец ключа можно добавлять, вроде даже тесты на эту фичу написаны
-
кстати, рендерер md->html не работает с картинками, кажется
-
-
в md на гитхабе все в порядке
-
Можно добавляеть если не меняется сортировка для ПК (т.е. в ключ добаляются поля с дефалтовыми значениями) и работает только для MergeTree.
-
Привет!
Увидел в тикете на github (https://github.com/yandex/ClickHouse/issues/1178) такую конструкцию: OPTIMIZE TABLE tablename [FINAL] DEDUPLICATE;
Про DEDUPLICATE в документации ничего не нашел. Кто нибудь знает что именно делает DEDUPLICATE и работает ли это вообще?How to guarantee data deduplication by clickhouse? · Issue #1178 · yandex/ClickHouseAt first,I thought ReplacingMergeTree can do this, after i tried serveral times (insert a set of data by file with version 1, than insert the same data set with version 2), i find this method can&a...
-
-
-
WITH expr AS ident SELECT ...
-
Если бы еще табикс можно как-то приучить нормально форматировать такие выборки :)
-
Это не попадает во вложенные селекты и юнионы же
-
-
-
Подскажите пожалуйста, как использовать кликхаус в качестве backend'а в проекте django?
-
Вам только для чтения нужно?
-
Да только чтение
-
Ну тогда использование orm неоправданно. Просто обращайтесь к вашим ch-табличкам через http интерфейс.
-
Хорошо, а если понадобится запись?
-
-
нельзя: ERROR: Date must be in YYYY-MM-DD format.
-
Joined.
-
У нас Kafka, но кворум победить не смогли. Задолбало ловить рандомно конфликты нод ZooKeeper, волево вырубили кворум.
-
Недавно наткнулись на проблему с дедупликацией при инсертах, когда приходили две одинаковых строки на вставку, а в итоге записывалась только одна! В общем дедупликация нужна в том случае когда не ждешь или когда не нужно иметь в таблице две одинаковых строки! По умолчанию она включена, чтобы выключить нужно установить insert_deduplicate в конфиге в 0.
-
Мне кажется, вы на стопку граблей наступите, когда Django будет генерировать запросы. Кучу всего руками править — то же создание моделей в базе уже со старта не совместимо.
-
Что тогда посоветуете?
-
Ничего. :) На деле кворум и Кафка — это разные штуки. Мы об кворум бились при разных источниках данных. Возможно, выкрутитесь через "не получил 200, попробуй записать ещё раз", но, емнип, тут мы уже огребали с дедупликацией, но толком уже не помню.
А Кафка норм, как накопитель вполне. Тут ещё несколько человек её так используют. -
Блин, не на то ответил. С ORM и ClickHouse пока толком ничего нет, кажется.
-
Да и зачем? Сила евойная в аналитике, которую можно спихнуть на базу и она не крякнет. Аналитику сию делать на таблицах с большим количеством колонок. Соответственно, у вас и модели раздутые будут. А полезные запросы всё равно вне ORM писать. Если вам всё-таки тут прям очень нужен ORM, кажется, проще наваять своё ровно под свои задачи.
-
алхимию пользуем в связке с кх, особо не жалуемся
-
благо что запросы там можно какие угодно строить
-
О. А сколько колонок в таблицах?
-
+1
-
не помню, штук 50 что ли. а какое это имеет значение?
-
в разрезе данного вопроса :)
-
Интересует размер моделей в смысле "это наш класс клика, у него три сотни полей".
-
Ну т.е. я раньше прикидывал кейсы использования КХ и у меня получалось, что либо ORM не нужен, либо КХ используется как простобаза. Видимо, что-то пропустил.
-
алхимию можно ипользовать не как орм, а как средство декларирования таблиц и генерации запросов
-
у неё есть core часть и orm часть, которая обертка над первой
-
Да, но объём кода и работы не тот же, что без Алхимии?
-
вторую использовать никто не заставляет
-
не пробовал без неё)
-
ну в целом разница будет не велика
-
select([func.toMonday(table.x.time), func.count(), func.groupUniq(table.c.user_id)]).where(table.c.time >= X).group_by(func.toMonday(table.x.time))
-
вот пример запроса
-
думаю, можно представить, сколько он будет занимать на raw sql
-
Такой же, что и в raw, собсно.
-
в целом да
-
только табличку описать надо будет :)
-
но структурированней получается эт точно
-
А нафига тогда? :) Привычка?
-
крайне полезно при генерации запросов
-
на ходу
-
ну и да, привычка
-
Понятно. Спасибо. :)
-
оверхеда почти нет, так что почему бы и нет
-
А как работает alter колонок? UInt64-> Int64, UInt32 -> UInt64, Float32 -> Int32, при мердже меняет или на лету (во время select)?
create table x (a Float32) engine=MergeTree partition by tuple() order by tuple();
insert into x values (-1000), (4.3), (3.14), (3000), (-100400.4);
alter table x modify column a Int32; -
Преобразует сразу - во время ALTER.
-
т.е. на колонке размером 1 TБ, придется ждать?
-
Да.
-
ОК, Спасибо.
-
А кстати insert в этот момент, пока alter идет, в каком типе делать?
-
-
FixedString имеет смысл использовать, когда размер действительно фиксированный. То есть, не от 1 до 1024, а всегда 32, например.
В остальных случаях лучше предпочитать String. -
Спасибо
-
/stat@combot
-
-
А какой в этом смысл (какое преимущество)?
-
-
Да никакого - расширял схему, добавляя таблицы и не ломая совместимость
-
-
-
Много JOIN-ов плохо работает - как по удобству (сейчас более одного JOIN-а в запросе писать трудно), так и по скорости (для JOIN правая часть сохраняется в хэш-таблицу и по ней делаются lookup-ы).
-
-
Если только она не слишком широкая. Слишком - это многие тысячи столбцов - тогда вставки будут медленными. Впрочем, если всегда вставляется всё сразу, то толстая таблица всё-равно лучше.
-
-
-
-
Ок. В зависимости от толщины массивов может быть разумно уменьшить index_granularity а также размер пачки при вставке.
-
Joined.
-
Я думаю, у меня в почтах именно размеры вставки не такие впечатляющие, как в кликах пользователей. Там будут жырные инсерты по тысяче записей - каждая на 2 килобайта текста, скажем, раз в 10 секунд
-
-
Это Ок.
-
господа а как долго может продлится стадия Starting up tables. ?
-
чот уже 20 минут в логе это последняя запись
-
данных не скзать что много. чуть больше 1t. но по ресурсам не видно что бы что то потреблялось. просто висим и всё
-
В основном это зависит от числа таблиц и числа кусков в них. В случае если таблицы маленькие, но их много, ClickHouse будет выводить в лог прогресс в процентах.
-
Также он выводит, какие именно таблицы он загружает.
-
сам себе отвечу. 30 минут.
-
увы нет
-
-
Наверное вы переключили логгирование в information.
2018.08.06 22:45:31.162028 [ 2 ] <Debug> default.hits_1000m (Data): Loading data parts -
да конечно в information
-
А может быть 30 минут - это таймаут для источника словаря, как написано в логе?
-
на трассе слишком много информации. я бы и инфо наверное бы хотел избавить от <Information> HTTPHandler: Done processing query
-
нее. монги там давно нету. чистый http
-
Наверное для соединения с этим словарём такой таймаут.
-
хм. проверю. спасибо
-
- 07 August 2018 (116 messages)
-
подскажите, как посмотреть подробности, в чем именно ошибка
текст ошибки такой
[ClickHouse SQL] Code: 36, e.displayText() = DB::Exception: Sampling expression must be present in the primary key, e.what() = DB::Exception -
это был запрос на создание таблицы
-
Joined.
-
А вы писали на какой-то одной реплике, или пытались на многих (в то смысле, что это проблема именно Кафка<->кворум, или параллельность<->кворум)? Я так понимаю, если запустить четко один поток записи на одной реплике, через MV например, и кворум, то должно быть ок, кворум не любит только параллельную запись.
-
И как в итоге выкручиваетесь без кворума? Пишете руками на каждую ноду самостоятельно, или смирились с асинхронной репликацией?
-
Это точно не проблема Кафки, т.к. конфликт кворума возникал в основном без неё, когда мы интенсивно скриптом мигрировали данные из Эластика в КХ.
-
Смирились. :) На носу придумывание и раскатка мастер-базы — поднимем какой-нибудь MySQL / PostgreSQL, раз в час будем сверять с КХ количество строк в таблицах, если что, дольём.
-
коллеги, добрый день!
по чатику найти не смог, поэтому напишу повторно, звиняйте, если что.
баг:
1. таблица id, str, int
2. строка значений: 1, 'some text \\', 0
3. при выгрузке в csv получаем строку 1,"some text \",0
4. при этом получается экранированная слэшом кавычка, что не даёт правильно распарсить csv штатными средствами -
-
ну, конечно
-
версия 1.1.54390
-
т.е. даже не так: там должно быть \\\\, чтобы обратно эта строка в кавычках разбиралась как \\
-
Подскажите, наиболее быстрый способ загрузки данных в КХ. Данных очень много. И еще вопрос целесообразно ли использовать kafka?
-
csv, можно в несколько потоков загружать
-
csv
Например, сейчас у меня из мускуля 1 час экспортится 50гигов csv.
В КХ импортится все это минут за 6-7 -
Порядка 300-400 гб в час в csv файлах
-
распараллель
-
Лей напрямую в stdin
-
Кафка хороша как накопитель. Грубо говоря, КХ любит одну пачку INSERT на тысячу строк, а не тысячу INSERT по строке. Соответственно, ставится Кафка, в которую в топики со всех концов льются понемногу данные, а с другого конца раз в секунду, например, что-то выгребает и стопками впихует в КХ.
-
Importing from MySQL dump to Clickhouse
I want to import from MySQL dump to Clickhouse. I've tried going through the official docs but cannot find anything. I've tried importing using CSV following Stack Overflow answer. Any help appreci...
-
Писал еще давненько. Лучше способа не нашел
-
А есть библиотека, которая обращается к client и напрямую льет данные в stdin?
-
А чем cat не устроил?
-
У меня не один файл, а несколько тысяч и новые выпадают раз в 5-10 секунд. Просто плохо представляю как это сделать через cat. Могли бы вы поподробнее объяснить.
-
-
лучше уж тогда tail -f *|
-
* выдаст файлы на момент запуска.
-
-
вы правы, для обновлемых по имени файлов не подойдет
-
А есть возможность не из файлов, а напрямую потоком загружать данные в кх?
-
откуда именно загружать?
-
Данные транслировать по сети, и не создавая файлов загружать в кх.
-
И? В чём проблема?
-
У ch есть два интерфейса для этого - http и tcp
-
В конце-концов, можно поставить клиента на удалённой машине
-
Я ссылку для кого кидал ?
-
/me на части хостов вообще через curl грузит...
-
Какая библиотека ? Из консоли все делается
-
/me
-
Ну почему же? Есть и библиотеки для питонов всяких...
-
Это из других чатов
-
даже во всяких питонах лучше кормить субпроцесс кликхаус-клиента через стдин
-
по кр мере, проще
-
А вот это уже очень интересно. Можно рассказать подробнее
-
ээээ
proc = subprocess.Popen(
[
'clickhouse-client',
'--database=<>',
'--query=' + ins_stmt,
...
],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
)
output, err = proc.communicate(input=bytes(YOUR_CUTE_DATA, 'utf-8')) -
чот типа такого, наверное?
-
Спасибо большое, добрый человек! Обязательно попробую так сделать)
-
-
-
Привет, товарищи.
Скажите, SummingMergeTree гарантирует полное схлопывание строк или нет?
Наблюдаю частичное суммирование, часть строк остались отдельно жить. -
┌─adv_id─┬─price─┬─event_date─┬─event_type─┬─event_count─┬──────event_datetime─┐
│ 1 │ 100 │ 2018-08-07 │ publish │ 1 │ 2018-08-07 15:09:47 │
│ 1 │ 100 │ 2018-08-07 │ publish │ 1 │ 2018-08-07 15:09:47 │
│ 1 │ 100 │ 2018-08-07 │ publish │ 1 │ 2018-08-07 15:09:47 │
│ 1 │ 100 │ 2018-08-07 │ publish │ 21 │ 2018-08-07 15:09:25 │
└────────┴───────┴────────────┴────────────┴─────────────┴─────────────────────┘ -
-
спасибо
-
хм. дало эффект однако
-
КХ сам по себе не мало весит и смысла брать алпайн нет, больше проблем с созданием под него пакетов, в официальном ubuntu-minimal, который тоже не сильно большой.
-
Ну и хорошо :) Но обычно доагрегируем уже в SELECT-е, главное что SummingMergeTree сделает за вас 99% работы, и как правило на порядки ускорит агрегацию результата.
-
-
-
Logstash with ClickHouse
Dec 18, 2017 There are many cases where ClickHouse is a good or even the best solution for storing analytics data. One common example is web servers logs processing. In this article, we guide you through Nginx web server example but it is applicable to other web servers as well.We will use Logstash with ClickHouse in order to process web logs. Logstash is a commonly used tool for parsing different kinds of logs and putting them somewhere else. For example, in ClickHouse. This solution is a part of Altinity Demo Appliance
-
-
а какие вы логи хотите лить в КХ?
-
-
небольшое кол-во логов приложения
-
а у приложения нет возможности конфигурировать log format?
-
я лью в КХ аксес логи nginx
-
-
так не надо, его учить ходить в КХ
-
-
а куда его писать?
-
я сделал все банально просто: в nginx сформировал access log в json формате, и повесил на крон баш скрипт, которые раз в 5 минут ротирует лог файл и льет данные в КХ
-
да, попахивает велосипедом, но работает на ура
-
-
да, топорно, но мне ничего более и не надо
-
Привет. Подскажите пжлст такой момент.
У меня таблица
SummingMergeTree(event_date, (adv_id, price, event_type), 8192, event_count)
где я собираю события публикации/снятия с публикации объектов.
Специфика такая, что юзеры могут перепубликовывать (без снятия) много раз объявления для:
- актуализации даты
- для изменения цены
Такие события схлопываются успешно и суммируются в event_count -
-
Все ок. Но дальше юзер снимает с публикации объявление.
А через пару дней - снова публикует.
И эта публикация начинает схлопываться снова. -
-
А делать этого мне нельзя, так как это не последовательно идущие публикации.
Последовательность разрывается событием UNPUBLISH.
Средствами движка можно как то реализовать схлопывание только последовательно идущих одинаковых значений первичного ключа (adv_id, price, event_type) ? -
Нет, не собираем.
-
При unpublish версию документа меняйте и запихайте её в ПК
-
Добрый вечер, как из массива строку получить не подскажите?
-
[1,2,4,5] -> 1_2_4_5
-
это на ReplacingMergeTree значит переходить надо? там версии указываются
-
спасибо
-
arrayStringConcat(arrayMap(x -> toString(x), [1, 2, 3, 4]), '_')
-
arrayStringConcat
SELECT arrayStringConcat(['a', 'b', 'c'], '_')
┌─arrayStringConcat(['a', 'b', 'c'], '_')─┐
│ a_b_c │
└─────────────────────────────────────────┘ -
Спсб большое в доках не нашел - плохо искал
-
понял мысль. спасибо, можно и на прежнем двиге остаться
-
First argument for function arrayStringConcat must be array of strings..
-
A если целые то какая магия?
-
привести к строке?
-
ага
-
arrayMap
-
Спсб
-
Чувствую летать будет ))
-
@milovidov_an Подскажи, другие алгоритмы джоинов помимо hash join не планируются?
-
Планируем сделать merge join.
Также уже сейчас есть nested loops (для cross join). -
merge join - это отлично. Смешно ) я вообще не знал, что есть cross join, ведь в доке он не описан. Хотелось бы возможно выбора nested loops для всего, потому что:
1) Не всегда весь набор таблиц, участвующих в join, влезает в память
2)Часто нужен джоин не только на равенство колонок -
@milovidov_an я попробовал 18.1 и сразу наступил на https://github.com/yandex/ClickHouse/issues/2795
и я не могу понять почему это вообще сломалось (читая readme и комиты) и вот теперь уже страшно вообще тестить 18-ю, там вообще много затронуто и что могло сломаться еще? -
-
-
-
ClickHouse does not lag?
-
да просто написать Clickhouse -- ne tormozit.
со спатником и перестройкой прокатило. -
Is ClickHouse slow? Nyet
-
Joined.
-
clickhouse never slow down
-
Даун можно опустить
-
-
не катит, если читать правильно(
-
А где бы почитать об этом? :(
-
Я тоже (пока) не знаю, каким образом это сломалось. Ошибка для нас новая; сами уже используем версию 18.5.1 в продакшене. Сейчас будем разбираться.
По количеству изменений, не смотря на изменение схемы версионирования, разница между версиями 1.1.54394 и 18.1.0 такая же как при других релизах. -
У нас в настоящее время идёт работа по JOIN. Один из пунктов - поддержка варианта записи, в котором таблицы перечисляются через запятую, а условия приводятся в WHERE. Такой вариант преобразуется в INNER JOIN путём переноса максимального возможного количества условий в ON, но если таких нет - получится CROSS JOIN.
-
Мне не совсем понятно, как ClickHouse подходит для мессенджера. Можно складывать все сообщения в таблицу для аналитики. Но в качестве основной базы для мессенджера - это вряд ли.
-
-
*niet
- 08 August 2018 (132 messages)
-
А потом еще добавить "(+)"-синтаксис из оракла для outer join и вообще огонь! :)
-
Привет всем!
Кто подскажет, что необходимо сделать после изменения схемы хранения, чтобы КХ перезста смердживать данные до 1 минуты, конфиг такой:
<pattern>
<regexp>^DevOps\.clickhouse\.test\.</regexp>
<function>avg</function>
<retention>
<age>0</age>
<precision>5</precision>
</retention>
</pattern>
а данные:
SELECT
Timestamp,
Value
FROM graphite
WHERE Path = 'DevOps.clickhouse.test.testval'
ORDER BY Timestamp ASC
┌──Timestamp─┬──────────────Value─┐
│ 1533703153 │ 6 │
│ 1533703199 │ 13.5 │
│ 1533703259 │ 34.333333333333336 │
│ 1533703269 │ 43.5 │
│ 1533703319 │ 90.5 │
│ 1533703342 │ 116.16666666666667 │
│ 1533703439 │ 163.64285714285714 │
│ 1533703492 │ 219 │
│ 1533703619 │ 257 │
│ 1533703679 │ 321.5 │
│ 1533703739 │ 375 │
│ 1533703784 │ 415.5263157894737 │
│ 1533703799 │ 433 │
│ 1533703859 │ 492 │
│ 1533703919 │ 522 │
│ 1533703979 │ 577.5 │
│ 1533704039 │ 640.5 │
│ 1533704099 │ 694.5 │
│ 1533704119 │ 714 │
│ 1533704219 │ 746.5 │
│ 1533704246 │ 767.0357142857143 │
│ 1533704279 │ 801 │
│ 1533704339 │ 856.90625 │
│ 1533704395 │ 911.5 │
│ 1533704459 │ 922 │
│ 1533704519 │ 981.5 │
│ 1533704579 │ 1036.5 │
│ 1533704623 │ 1078.1818181818182 │
│ 1533704639 │ 1092.5 │
│ 1533704642 │ 1102 │
│ 1533704663 │ 1113.5 │
│ 1533704679 │ 1131.5 │
└────────────┴────────────────────┘
шлю каждую секунду -
инкрементальный счетчик
-
+1. Очень ждем. И ещё бы разобраться с поведением звездочки и алиасов https://github.com/yandex/ClickHouse/issues/2786Unexpected SELECT * with Join #2786
Steps to reproduce the behavior SELECT * FROM (SELECT 1 AS id, 2 AS value) ANY INNER JOIN (SELECT 1 AS id, 2 AS values) USING id; Expected Result 1 2 2 Actual Result 1 2
-
-
Настройки в отжельном xml-файле. Он просто не действует. Как заставить КХ брать настройки хранения из отдельного файла?
пробовал его и <include_from> и складывать в conf.d рядом с config.xml -
мы пишем в 2 кластера
-
-
А каким образом в два кластера? Вы имеете в виду шардирование? Или каким-то определенным образом данные перегоняете?
-
-
-
Доброго времени суток! Господа кто нибудь связывал 1с и кх? Кх как бэкэнд в замену постгри
-
Т.е по сути вы просто дублируете данные?
-
-
КХ для этого не предназначен, ИМХО.
-
да
-
-
-
Просто было интересно, то postgres маленько не доставляет (
-
-
-
Тогда зачем два кластера? Когда есть стандартная репликация, которая делает то же самое, по сути
-
-
postgres/mssql/oracle и КХ - это две принципиально разные парадигмы работы с данными. Ну не впихнешь 1С в колоночную аналитическую базу, как не старайся.
Например в КХ нет UPDATE, это вас не смущает? :) -
-
-
Смущает)
-
И ещё много чего нет. Вот тут, например, хорошая статья (пусть и немного устаревшая): https://felixit.blog/2017/07/04/clickhouse-zachem/ClickHouse: Зачем
Два англичанина ловят рыбу в Темзе. У одного дергается поплавок, он подсекает и вытаскивает прелестную русалку. Полюбовавшись ею, снимает русалку с крючка и бросает обратно в воду. Второй удивляетс...
-
Честь и хвала
-
Тогда нафига вам эти проблемы с 2-я разными кластерами, сделайте реплику и храните сырые данные для восстановления последних данных, для всего остального FREEZE PARTITION.
-
-
Статья устарела, я осенью обновлю её. :)
-
-
О, так это вы мой любимый автор в IT :)
-
У вас есть 2-а кластера в неизвестном относительно друг-друга состоянии, а так да, все норм)
-
Тоже себя люблю, спасибо. :)
-
-
А вот тут можно попросить подробнее? Чем и как?
-
-
если честно, то я не знаю. я девопс, тулл девелоперы запилили, но подозреваю что строятся 2 отчета и данные сравниваются
-
-
-
-
Храним сообщения уже готовыми структурами в, уведомления о новых сообщениях выдергиваем по timestamp, работает, как часы
-
Сейчас ботов пилим
-
Возьмите PostgreSQL ;)
-
Есть выбор либо MSSQL через промежуточный API либо отдельный сервер с КХ )
-
MSSQL - отличная СУБД.
-
-
Схему прореживания (graphite_rollup) можно как-то исменить без перезагрузки сервера ?
-
Нет
-
Спасибо. А инклюдить можно ее ?
-
Там все можно инклудить, попробуйте, например, <graphite_rollup>conf.d/graphite_rollup.xml</graphite_rollup>
-
Так он проигнорировал настройки.
-
Коллеги, добрый день, обновили тут кластер до 18.6.0 - отвалились все словари из постгреса через ODBC. Ошибку выдал следующую - https://pastebin.com/SxdiCPML . Я что-то упустил в чендж логе?
-
<graphite_rollup_example>conf.d/graphite_rollup_example.xml</graphite_rollup_example>
В /etc/clickhouse-server/conf.d/graphite_rollup_example.xml
<?xml version="1.0"?>
<yandex>
<graphite_rollup_example>
<pattern>
<regexp>click_cost</regexp>
<function>any</function>
<retention>
<age>0</age>
<precision>3600</precision>
</retention>
<retention>
<age>86400</age>
<precision>60</precision>
</retention>
</pattern>
<default>
<function>max</function>
<retention>
<age>0</age>
<precision>60</precision>
</retention>
<retention>
<age>3600</age>
<precision>300</precision>
</retention>
<retention>
<age>86400</age>
<precision>3600</precision>
</retention>
</default>
</graphite_rollup_example>
</yandex> -
-
unixODBC connection failed after upgrade to 18.5.1 · Issue #2806 · yandex/ClickHouse
Clickhouse failed to connect to unixODBC datasource after upgrade from 18.1.0 to 18.5.1 Exception: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Connection attempt failed: Connection...
-
Благодарю - не додумался баги на гитхабе посмотреть. Буду ждать резолва тогда.
-
Недавно обновились на версию 18.5.1-1el7
Сегодня посыпалось:
] <Error> default.graphite (StorageReplicatedMergeTree): Code: 228, e.displayText() = DB::Exception: Unexpected uncompressed size of file Date.bin in data part, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result. -
-
-
-
откатился на 1.1.54390 , ошибка не ушла
-
так проявилось через дня 3
-
и на стейджинге раскатано было
-
Обычно данные кораптятся только в одну сторону и откатом версии тут не помочь. У вас конфиг сжатия на репликах одинаковый, а то мало ли одна жмет lz4, другая zstd. Или реплики были разных версий и чудили.
-
Joined.
-
Добрый день. У меня падает клиент. gdb говорит это:
mnstat19.luxup.ru :) show tables
SHOW TABLES
Program received signal SIGILL, Illegal instruction.
0x0000000005132ae4 in DB::PrettyBlockOutputStream::calculateWidths(DB::Block const&, std::vector<DB::PODArray<unsigned long, 4096ul, Allocator<false>, 0ul>, std::allocator<DB::PODArray<unsigned long, 4096ul, Allocator<false>, 0ul> > >&, DB::PODArray<unsigned long, 4096ul, Allocator<false>, 0ul>&, DB::PODArray<unsigned long, 4096ul, Allocator<false>, 0ul>&, DB::FormatSettings const&) ()
(gdb) -
как я понимаю разработчики кидают эксепшн - но ничего не пишут чтобы понять причину
-
клиент свежий из репозитория. на другой машине такой же клиент работает
-
-
а разве клиенту это нужно ?
-
sse4_2 эта машине не поддерживает - но клиент вроде в этом не должен нуждаться
-
У клиента и сервера бинарник один. Параметры запуска разные
-
Да, какое-то время были разные версии на репликах. Сейчас 2я пишет:
<Error> default.graphite (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result. -
Решено перналить ее с первой, так как при ее остановке первая перестала писать ошибку.
-
Аналогичная ошибка, встречалась уже не первый раз, и ругается всегда на поле с установленным значением DEAFULT (но может так совпало).
Но, насколько я понимаю по тексту ошибки, КХ сам должен привести данные в соответствие (We will download merged part from replica to force byte-identical result)? -
Да, он должен скачать проблемный кусок с другой реплики если это возможно.
-
если собирать все с -march=sse4.2, то эти инструкции будут везде. сомневаюсь, что у клиента какие-то особые флаги сборки
-
-
так там один же бинарник , он и сервер и клиент .
-
-
-
Что у вас за асинхронщина и зачем что-то выдумывать?
-
-
-
-
пришлось делать через жопу 🙁 https://github.com/vstakhov/rspamd/blob/master/src/plugins/lua/clickhouse.lua#L746rspamd/rspamd
Rapid spam filtering system. Contribute to rspamd/rspamd development by creating an account on GitHub.
-
жопа тоже интерфейс ¯\_(ツ)_/¯
-
какая глубокая мысль
-
-
-
-
-
-
-
-
коллеги, подскажите, возможно ли использовать materialized столбцы для dictionary таблиц?
при создании такой таблицы ошибки не возникает, однако при попытке доступа к столбцу получаю not found column -
да, похоже на багу:
select IPNet from rspamd where Date = today();
Code: 10. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Not found column IPNet in block. There are only columns: Date.
чуть-чуть поменяем запрос на эквивалентный:
select IPNet from rspamd where Date = today() and TS > '2018-08-08 00:00:00';
1001327 rows in set. Elapsed: 0.060 sec. Processed 1.08 million rows, 15.69 MB (18.04 million rows/s., 261.29 MB/s.) -
забавно, я как раз сегодня наступил
на Not found column ... in block
https://github.com/yandex/ClickHouse/issues/2827 -
-
select * from rspamd where Date = today();
у вас наверное optimize move to prewhere включен -
-
-
-
в * новая колонка (IPNet) есть? ну и используйте это как воркэраунд
-
-
-
я думаю проще можно 1. optimize final все пофиксит или 2. выбирайте IPNet,date
-
replacing не гарантирует отсуствие дубликатов, они МОГУТ схлопываться в будущем при мерже.
optimize final инициирует мерж и МОЖЕТ схлопнуть
select from table final выбирает без дубликатов (но работает до 1000 раз медленнее)
version -- не обязателен, КХ сам сэмулирует это поле.
схлопывание работает только в рамках партиции
create table y(a Int64, b Int64, z Date) engine = ReplacingMergeTree partition by (a,z) order by b;
insert into y select 1,1, toDate('2018-01-01') from numbers(1);
insert into y select 2,1, toDate('2018-02-01') from numbers(1);
optimize table y final;
select count() cnt from y
cnt
2
select count() cnt from y final
cnt
1 -
optimize не пофиксил
-
-
какая версия КХ? как делали optimize ?
-
select * возвращает новое поле ?
-
-
-
-
да забавно, надо другую колонку добавлять (которая не в prewhere), чтобы не было экспепшина
select c,d,z from y prewhere a <1000 -- работает
select c,d,a from y prewhere a <1000 -- не работает -
final просто создал эту колонку для старых строк, естественно перезапишутся все 100 тыщ миллиардов строк, поэтому не всегда возможно это.
-
да, я думаю, что это все-таки бага в сабже, которую неплохо было бы исправить
-
а что у кого-то были сомнения?
-
SELECT dictGetUInt64('urls', 'project_id', toUInt64(pid)) FROM тра-та-та....
↘️ Progress: 3.54 million rows, 159.72 MB (3.40 million rows/s., 153.57 MB/s.) 66%Received exception from server (version 1.1.54385):
Code: 69. DB::Exception: Received from ...... DB::Exception: urls: identifier should be less than 500000.
Подскажите, как бороться? -
поменяйте тип источника на flat
-
в конфиге словаря
-
hashed нельзя использовать, если есть записи с идентификатором > 500000
-
-
ну да, попутал :)
-
-
Всем привет! Вырос на кластере резко compressed read buffer - https://yadi.sk/i/PVYBui073a3LWz - стали дольше работать основные запросы, хотя обрабатываемая память сиильно не увеличилась - это же не похоже на сложные запросы? Может кто сталкивался?
-
В логах ошибки вида ServerErrorHandler: Code: 210, e.displayText() = DB::NetException: Connection reset by peer: while reading from socket
-
- 09 August 2018 (228 messages)
-
Joined.
-
Ошибка не уходит и повторяется 5-10 раз в секунду. На 2м сервере в логе при этом:
[ 16 ] <Error> default.graphite (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
Как валидно дропнуть эту реплику и перезалить с 1го, без смены ID реплики? -
поискать по слову force в документации, там было про файловый флаг, после выставления которого идёт перезалитие
-
я дропнул таблицу на 2м, пересоздал и пошла реплика.
-
Ещё вопрос, если меняется схема прореживания (graphite_rollup) в конфиге, нужно менять и перезагружать сервер на всех репликах и максимально синхронно, так?
-
Остановил 2й сервер, так как реплика с 1го отняла все ресурсы(LoadAverage подскочил вдвое больше числа), и на 1м в логах пошли:
<Error> executeQuery: Code: 252, e.displayText() = DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts., e.what() = DB::Exception (from 127.0.0.1:57754)
Прошло полчаса без нагрузки, а первый ни строчки не вставил, и все пишет <Error> executeQuery: Code: 252, e.displayText() = DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts., e.what() = DB::Exception (from 127.0.0.1:57754) -
А откуда у вас столько партов? Надо наверно сперва решить с этим вопрос
-
Обычно в него пишется несколько Миллионов метрик в минуту, сейчас около 200 метрик
-
ни один файл из carbon-clickhouse не удалился
-
а сколько должно быть, я искад по данной ошибке, и у других не 300
-
carbon-clickhouse вставляет каждые 10 секунд
-
то есть примерно по 600к записей за раз
-
@stufently Я так понимаю, таких ошибок не должно быть, когда с сервера льется реплика на новый(объем данных около 2 ТБ)
-
Если у вас это на пустой реплике то ощущение что настройки или версии кх у вас разные
-
Если на обоих одно и тоже то такие ошибки должны быть везде
-
2я реплика остановлена сейчас, 1я тормозит и сыплет ошибками, процессоры загружены на 50-80%, вставка не идет
-
ну судя по всему первой не хватало совсем ресурсов и она не успевала мержить ваши парты
-
а что по конфигу сервера для реплики ?
-
конфиг одинаковый, как узнать ,ч тосейчас делает сервер?
в мерджах ничего -
в целом мы так делали и вроде хватало ресурсов и на отдавать реплику и мержить , хотя у нас данных поменьше и вставка вероятно тоже
-
посмотреть в логе кх
-
ну и всегда можно зайти и посмотреть что с партами в каталоге дата кх
-
в каталоге данных нет ни мерджей ни инзертов
-
ну тогда смотрите логи
-
странно что нет данных так как оно начинается сразу
-
2й сервер поднялся кроном, остановил и все пошло, 1й отстал со вставкой на 1 час, сейчас наверстывает. @stufently Спасибо за помощь
-
@stufently не подскажешь, от чего зависит быстродействие КХ? сейчас он вставляет в 1,5 раза(25М строк вместо 16М) больше данных чем обычно(данных накопилось на 1 час), хотя ранее при испытаниях(когда останавливал сервер и потом вставлялось из carbon-clickhouse) была скорость 3-5 раз(до 80М строк вместо 15М), процессоры заняты слабо(220% из 40 ядер), диски(ССД) отдыхают, памяти 100Г из 120Г свободно
-
может подять
<background_pool_size>50
<background_schedule_pool_size>24
? -
А есть ошибкт в еррор логе?
-
Вообще особого смысла ложить кх на такие супер толстые сервера не вижу
-
2018.08.09 08:43:25.003270 [ 57 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Checking if anyone has a part covering 20180708_20180731_711637_711662_11.
2018.08.09 08:43:25.004147 [ 57 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Found parts with the same min block and with the same max block as the missing part 20180708_20180731_711637_711662_11. Hoping that it will eventually appear as a result of a merge.
2018.08.09 08:44:01.864955 [ 49 ] <Error> default.graphite (StorageReplicatedMergeTree): Code: 228, e.displayText() = DB::Exception: Unexpected uncompressed size of file Date.bin in data part, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
2018.08.09 08:44:01.865692 [ 111 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Checking part 20180708_20180731_711637_711662_11
2018.08.09 08:44:01.865950 [ 111 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Checking if anyone has a part covering 20180708_20180731_711637_711662_11.
2018.08.09 08:44:01.866669 [ 111 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Found parts with the same min block and with the same max block as the missing part 20180708_20180731_711637_711662_11. Hoping that it will eventually appear as a result of a merge.
2018.08.09 08:44:39.522705 [ 43 ] <Error> default.graphite (StorageReplicatedMergeTree): Code: 228, e.displayText() = DB::Exception: Unexpected uncompressed size of file Date.bin in data part, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
2018.08.09 08:44:39.531295 [ 112 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Checking part 20180708_20180731_711637_711662_11
2018.08.09 08:44:39.531490 [ 112 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Checking if anyone has a part covering 20180708_20180731_711637_711662_11.
2018.08.09 08:44:39.532384 [ 112 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Found parts with the same min block and with the same max block as the missing part 20180708_20180731_711637_711662_11. Hoping that it will eventually appear as a result of a merge. -
сервер достался от графита(go-carbon)
-
Ощущение что у вас ещё мусор в зукипере остался как минимум
-
мусор, думаю, от 3й реплики, которая сейчас также остановлена
-
как-то можно ускорить КХ?
-
ресурсов не ест, ощущение, что он однопоточный, ядро занято мерджами и ядро инзертами, итого 2 ядра из 40
-
Вообще надо было раскидать шарды по серверам попроще наверно
-
У нас вообще под кх изначально было 2 ядра 8 гигов оперативны
-
нет шардов, но если так и буде тормозить с наливкой реплик, придется делить данные
-
сервер и нагрузка с текущего графита, что ограничивает скорость мерджей, настройки выше не помогут?
-
Ну мне кажется в плане вертикального масштабирования все не так хорошо везде, а горизонтально все ок
-
Ну и вставки можно переносить между шардами если есть какие то проблемы
-
когда читаешь с КХ то он утилизирует до 30 ядер и все ок, сейчас без чтения только вставка и оч медленно
-
надо наверно Миловидова спросить , я сказать четсно не сталкивался с медленной вставкой всегда хватало и не помню каких то материалов по тюнингу кх для максимальной вставки
-
а посмотрите еще у вас не ругается на то что мержи не идут из за того что кусков больше 300:
-
?
-
@milovidov_an Привет. Есть догадки, почему вставка замдлилась?
-
как было до этого , если ругается то надо просто количество партов разрешенных увеличить
-
как это сделать? сейчас один диск из 10 на 35% занят вот и вся нагрузка
-
Читал это : https://github.com/yandex/ClickHouse/issues/1510
у нас 1.1.54390Merges are processing significantly slower than inserts #1510Hello, after update a server and client from the version 1.1.54189. to the latest 1.1.54310, we enconuntered with an error "Too many parts (372). Merges are processing significantly slower than inserts". We have already added <max_bytes_...
-
ну ошибку поискать в логе в текстовом просмотрщике или грепом
-
сейчас нет ошибок, кроме мусора в зукипере
-
МБ есть какая-то версия, которая точно стабильная?
@stufently у вас какая ? -
у меня какая то старая давно не обновлялся, смотрю пока тут сыпят по тихоньку ошибки из 18 версии, пока нет необходимости острой обновляться, хотя надо бы прикрутить делете
-
у меня 1.1.54370
-
эта проблема давно пофикшена , 300 партов и нельзя писать это не баг это как бы фича настраиваемая
-
как настроить, что бы не останавливались инзерты при нагрузке?
-
ну вообще это шардами больше решается а так увеличить количество разрешенных партов не смерженных
-
но опять таки в миллион их не стоит поднимать это скажется на перфомансе
-
удвоил background_pool_size до 100 , перезагрузил, смотрю
-
судя по метрике insertedRows, не помогло
@stufently не так увеличивать партишены? -
ну если у вас нет ошибок что больше 300 партов и не лочится вставка то это не поможет , опция другая , по дефолту она 300, можно наверно ее легко найти в доке, на вскидку не помню как она называется
-
Вы так только память всю съедите.
-
Памяти 100Г из 120 своюодно, КХ ест 4-5Г
-
как распараллелить вставки/мерджи, сейчас ровно 2 ядра заняты
-
в исходниках нашел:
/** If more than this number active parts, throw 'Too many parts ...' exception */ \
M(SettingUInt64, parts_to_throw_insert, 300) -
-
-
вот, сейчас вижу мердж:
:) select progress from system.merges;
SELECT progress
FROM system.merges
┌────────────progress─┐
│ 0.10913025462625675 │ -
max_bytes_to_merge_at_max_space_in_pool поднять стоит?
-
А в логи часто пишет что откинул мерж из-за этого?
-
Joined.
-
Всем привет! такой вопрос, есть ли возможность изменить индекс (добавить одно или несколько полей в него) для уже существующей таблицы?
-
не поднимал, в логах аномального ничего нет
-
сейчас идет долгий мердж, занял 28,5Г диска под него
-
LoadAverage 2.4 , если нормализовать, то 7%
-
один мердж не распараллелить?
-
нет, один мерж не распараллелить
-
по-идее, как он закончится, инзерты должны быстрее идти?
-
да по идее в вашем конфиге он не должен особо влиять
-
у вас же ссд ?
-
Только если он вам диск "нагибает" + если кусков в партиции больше 150 то КХ "притормаживает" инсерты, соответственно если мерж эти куски склеит то и инсерты быстрее будут
-
-
по количеству партиций у него нет ошибок в иррор логе, ну а диск мне кажется все таки ссд, так как данных всего 2тб, а сервер на 40 ядер и 128 гигов оперативы
-
как вари ант идет реплика на второй сервер и возможно не хватает сети, не загружен ли случаем гигабит сети на 100%
-
нет, сейчас реплика никуда не идет, вот стата:
PRC | sys 4.31s | user 41.58s | | | #proc 426 | #trun 4 | #tslpi 976 | | #tslpu 0 | #zombie 0 | clones 1166 | | | no procacct |
CPU | sys 34% | user 427% | | irq 2% | | idle 3527% | wait 11% | | | steal 0% | guest 0% | curf 2.73GHz | | curscal 88% |
CPL | avg1 3.57 | | avg5 3.01 | avg15 2.95 | | | | csw 178924 | | intr 481099 | | | numcpu 40 | |
MEM | tot 125.6G | free 8.8G | cache 100.7G | dirty 1.7G | buff 0.0M | slab 2.7G | slrec 2.5G | shmem 3.0G | shrss 0.0M | shswp 0.0M | vmbal 0.0M | | hptot 0.0M | hpuse 0.0M |
SWP | tot 0.0M | free 0.0M | | | | | | | | | | vmcom 20.6G | | vmlim 62.8G |
LVM | centos-home | busy 16% | | read 660 | write 1122 | | KiB/r 123 | KiB/w 409 | MBr/s 8.0 | | MBw/s 44.9 | avq 98.07 | | avio 0.92 ms |
LVM | centos-root | busy 0% | | read 0 | write 35 | | KiB/r 0 | KiB/w 22 | MBr/s 0.0 | | MBw/s 0.1 | avq 1.50 | | avio 0.46 ms |
DSK | sdg | busy 13% | | read 39 | write 691 | | KiB/r 131 | KiB/w 502 | MBr/s 0.5 | | MBw/s 33.9 | avq 118.22 | | avio 1.72 ms |
DSK | sdd | busy 1% | | read 24 | write 163 | | KiB/r 128 | KiB/w 404 | MBr/s 0.3 | | MBw/s 6.4 | avq 57.93 | | avio 0.77 ms |
DSK | sdj | busy 1% | | read 209 | write 34 | | KiB/r 126 | KiB/w 354 | MBr/s 2.6 | | MBw/s 1.2 | avq 5.24 | | avio 0.53 ms |
NET | transport | tcpi 50651 | tcpo 34781 | udpi 0 | | udpo 0 | tcpao 14 | tcppo 19 | tcprs 0 | tcpie 0 | tcpor 6 | | udpnp 0 | udpie 0 |
NET | network | ipi 50655 | | ipo 34570 | ipfrw 0 | | deliv 50651 | | | | | icmpi 0 | | icmpo 0 |
NET | bond0 29% | pcki 254968 | pcko 16862 | | sp 1000 Mbps | si 298 Mbps | so 1283 Kbps | | coll 0 | mlti 0 | erri 0 | erro 0 | drpi 0 | drpo 0 |
NET | eno1 29% | pcki 254740 | pcko 16862 | | sp 1000 Mbps | si 298 Mbps | so 1283 Kbps | | coll 0 | mlti 0 | erri 0 | erro 0 | drpi 0 | drpo 0 -
ну в таом виде стата просто набор символов
-
...
NET | bond0 29% | pcki 254968 | ....
NET | eno1 29% | pcki 254740 ... -
это 300Мбит входящих в carbon-clickhouse метрик
-
у вас еще и бондинг ?
-
а почему 300 мбит а не 1000 ?
-
если бондинг
-
столько метрик влетает, больше нет
-
Коллеги, подскажите где поподробней почитать рекомендации по выбору полей в индекс. Вот к примеру у меня .... Engine = MergeTree(event_date, (selection_id, received_at), 8192) и я не особо понимаю, каким образом мне подобрать поля в этот индекс. selection_id, received_at? или может три поля. Или может быть выбрать другие поля?
-
-
Нужно знать основные типы запросов и поля, по которым эти запросы фильтруют. У нас это дата события и тип события, а ещё иногда id-пользователя. Поэтому первичный ключ такой: mark, date, userId
-
-
-
Не могу сказать. Но скорее всего нет, не относится
-
Мердж закончился , вставка не выросла, куда ещё смотреть?
-
А нагрузку на диск как смотрели? Можете скин скинуть iotop-а?
-
iotop -d6 :
Total DISK READ : 0.00 B/s | Total DISK WRITE : 42.42 M/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 11.43 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
25012 be/4 elastics 0.00 B/s 1343.69 B/s 0.00 % 0.01 % java -Xms1g -Xmx1g -XX:+Us~th.conf=/etc/elasticsearch
25041 be/4 elastics 0.00 B/s 1343.69 B/s 0.00 % 0.01 % java -Xms1g -Xmx1g -XX:+Us~th.conf=/etc/elasticsearch
25014 be/4 elastics 0.00 B/s 1343.69 B/s 0.00 % 0.01 % java -Xms1g -Xmx1g -XX:+Us~th.conf=/etc/elasticsearch
39011 be/4 root 0.00 B/s 671.85 B/s 0.00 % 0.01 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
2246 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
5472 be/4 root 0.00 B/s 671.85 B/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
5759 be/4 root 0.00 B/s 671.85 B/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
4980 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
38715 be/4 root 0.00 B/s 1343.69 B/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
39182 be/4 root 0.00 B/s 2.62 K/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
3658 be/4 root 0.00 B/s 671.85 B/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
40807 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % graphite-clickhouse -confi~e/graphite-clickhouse.conf
3699 be/4 root 0.00 B/s 1343.69 B/s 0.00 % 0.00 -
читабельно ?
-
iostat -xmt 6 :
09.08.2018 11:14:39
avg-cpu: %user %nice %system %iowait %steal %idle
16,99 0,00 2,75 0,00 0,00 80,26
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0,00 0,67 0,00 12,17 0,00 0,05 7,78 0,00 0,32 0,00 0,32 0,07 0,08
sdd 0,00 0,67 0,00 11,00 0,00 0,06 10,30 0,00 0,29 0,00 0,29 0,05 0,05
sdb 0,00 1,50 0,00 9,50 0,00 0,05 10,11 0,00 0,14 0,00 0,14 0,09 0,08
sda 0,00 0,17 0,00 13,67 0,00 0,51 75,80 0,01 0,89 0,00 0,89 0,10 0,13
sdc 0,00 1,17 0,00 20,83 0,00 2,04 200,45 0,09 4,18 0,00 4,18 0,22 0,45
sdf 0,00 0,67 0,00 18,00 0,00 0,26 30,10 0,04 2,44 0,00 2,44 0,42 0,75
sdg 0,00 0,33 0,00 9,17 0,00 0,02 5,24 0,00 0,16 0,00 0,16 0,05 0,05
sdh 0,00 0,17 0,00 12,17 0,00 0,05 8,11 0,00 0,23 0,00 0,23 0,04 0,05
sdi 0,00 0,50 0,00 14,83 0,00 2,03 280,90 0,18 12,19 0,00 12,19 0,61 0,90
sdj 0,00 0,33 0,00 11,50 0,00 0,04 7,54 0,00 0,06 0,00 0,06 0,03 0,03
dm-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
dm-1 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
dm-2 0,00 0,00 0,00 64,00 0,00 5,11 163,40 0,35 5,41 0,00 5,41 0,25 1,58 -
а диск точно ссд все таки ?
-
да, 10 штук LVMом
-
ну по нагрузке почти ее нет для ссд и по иотопу видно что никакущая нагрузка
-
вот, нагрузки нет, а инзерты идут еле-еле(28M), при тестах было 80М+
-
загружено 1-1,5 ядра
-
А что вообще в таблице?
select partition, count() as num_parts from system.parts where table = 'ВАША ТАБЛИЦА' and active group by partition order by partition -
select partition, count() as num_parts from system.parts where table = 'graphite' and active group by partition order by partition
┌─partition─┬─num_parts─┐
│ 201706 │ 1 │
│ 201801 │ 2 │
│ 201804 │ 1 │
│ 201805 │ 6 │
│ 201806 │ 16 │
│ 201807 │ 21 │
│ 201808 │ 18 │
└───────────┴───────────┘
7 rows in set. Elapsed: 0.011 sec. -
данные полноценные с 201805
-
тут все хорошо
-
тоже ищу, где плохо
-
инзерты отстают на 4 минуты, как догонит, включу 2й сервер и буду наблюдать за нагрузкой при наливке реплики
-
ещё вопрос, вроде вчера задавал:
пишу в конфиге КХ
<graphite_rollup>
<regexp>^DevOps\,clickhouse\.</regexp>
<function>avg</function>
<retention>
<age>0</age>
<precision>5</precision>
</retention>
</pattern>
...
<graphite_rollup>
но он через время мерджит до минуты, как умолчание
кто-то сталкивался -
а ни у кого случаем нет раскиданного по европе зукипера на 7 нод ?
-
-
Всем привет, кто подскажет советом:
Приложение на питоне, используем clickhouse_driver
Есть три таблицы с одинаковыми данными, отличие что у них PK свой. Предположим таблица №1, №2 и №3
Препдоположим нам пришло 10 тыс событий и бага в том что статистика запишется так:
№1 примерно 10005-10015 событий (т.е запишется больше чем пришло!!)
№2,№3 запишется ровно 10 тыс событий
Искали ошкибку в коде, по принтам увидели что все окей, идет ровно 3 записи
Репликация асинхронная, мульти-мастер
Кто подскажет может кто сталкивался с таким? -
ну посмотрите просто какие именно записи лишние то
-
что это за 5-15 записей что в них
-
Всё зависит от того, какая структура таблиц, и как пишите данные
-
это дубли записей, с тем же datetime
-
таблица типа MergeTree, пишем через INSERT
-
-
Если вы пишите по одной записе - это не правильно
-
-
-
Это мало. На каждый инсерт создается новый файл в КХ и куча других действий. И вставлять чаще чем раз в секунду - тоже плохо сказывается. Предполагаю что на 10001-ю вставку КХ что-то пишет в ответ типа ошибки. Ваш драйвер точно возвращает ошибку если не вставил?
-
здравствуйте. есть какая нито зависимость между гранулярностью индекса MergeTree и оптимальным количеством вставляемых записей?
-
то есть вы допускаете что ошибка дублирования может быть из за частой записи?
-
Я допускаю что по причине частых вставок КХ становится плохо и он в какой-то момент начинает творить дичь (как например у вас)
-
скорее всего дичь творит на мой взгляд софт
-
Ну и его тоже проверить
-
думаю самое простое почи тать лог ошибок в кх
-
Сейчас даные на 2й сервер идут с максимальной скоростью, которую поддерживает 2й.400МБит/с данных уходит в реплике 1й сервер ошибок не показывает, занят на 11% по процессорам
-
да нет, поднял логи за время дублей - ошибок нету...
-
а таблица в которой записей больше одна и таже? Питон получает таймаут на инсерт и пишет все еще раз.
-
-
-
Joined.
-
А таблицы дистрибьютид?
-
-
-
Вставляете в дистрибьютед таблицу или напрямую в репликейтедмерджтри
-
?
-
-
Joined.
-
-
Joined.
-
Всем привет!
Подскажите, КХ может пользователей из zookeeper брать? -
В ZK можно целиком секцию users хранить и он ее должен заменить, но это не очень удобно
-
Почему неудобно? В такой конфигурации я смогу пользователей налету добавлять без перезагрузки КХ?
-
Для обновления пользователей нужно просто конфиг помепнять без перезагрузки сервера
-
круто!
-
А почему неудобно в zookeeper хранить?
-
-
-
-
-
если нет каких то фатальных изменения для вас в ченджлоге то да
-
-
Он и при обновлении на следующую версию может вам что-нибудь отчекрыжить, а может и через несколько версий легко взлететь.
-
ну бывает софт который надо обновлять только на следующую версию
-
а с КХ как?
-
с кх можно прыгать
-
-
не забыв предварительно помолиться
-
ну я лично пока с обновлениями проблем не имел , ченджлог вроде тоже почитать не сложно, бывают конечно проблемы в каких то случаях, но я бы не сказал чтобы они были чаще чем в любом другом софте который я использую
-
с 1.1.54342 до 18.6.0 всё норм обновлюсь? )
-
скорее всего да
-
+1. Пока все обновления вплоть до текущей версии проходили штатно
-
отпишись
-
ODBC поломан в 18.6, у нас словари отвалились
-
-
вы тестили? У меня примерно 6 ишью при таком переходе, вплоть до не старта КХ, лечится, но все равно.
-
Кстати сегодня доразнес кластер зукипера из семи штук по разным датацентрам и провайдерам в Европе, пока 20 минут полет нормальный. Как то момент геораспределенности очень плохо описан в интернете либо же все пишут что так делать не надо
-
нет, не тестили, вот только собираюсь
-
Мы вчера на 6.0 обновились, с 1.0, всё прошло хорошо, нареканий нет
-
Поделитесь "подводными камнями"
-
Ну их не было
-
Переживаю только за связность сети и способность кластера зукипера собираться после развала
-
конечно не надо, больше 3 зукиперов и если летенси между ними больше 50мс, это просто палки в колесах. Каждый инсерт ждет согласовния и тормозов семи нод.
-
Ну посмотрим
-
-
Ну там в целом меньше 50мс везде
-
Joined.
-
одну ноду обновил, вроде всё ок
-
обновлялся с 1.1.54318
-
-
Joined.
-
-
Последнюю
-
-
множественные джойны??? а откуда инфа? сами очень ждем
-
Так Алексей писал, что для Replicated уже чтоль готовы, для обычного MergeTree осталось запилить
-
Roadmap на Q3 2018 написано
-
-
ох скорей бы, скорей
-
у нас запросы генерятся из интерфейса таблицы с фильтрами, через вложенные подзапросы и лапша жесть получается
-
Аналогичная лапша. Тоже ждём с нетерпением
-
Да....
-
-
-
-
-
-
Joined.
-
alter delete работает, я уже на проде 700млн. строк (залитых по ошибке) удалил (18.5.1), (два часа удалялось)
-
-
Joined.
-
Joined.
-
для знктоков CH+Supeset: можно ли меять client timeZone при коннекте?
-
чтоб в superset показывать данные в другой timezone
-
Обновился до последней версии и теперь пишет
2018.08.10 01:40:11.116978 [ 1 ] <Error> Application: Net Exception: Address already in use: [::1]:8123
2018.08.10 01:40:11.117101 [ 1 ] <Information> Application: shutting down
2018.08.10 01:40:11.117183 [ 1 ] <Debug> Application: Uninitializing subsystem: Logging Subsystem
2018.08.10 01:40:11.117321 [ 6 ] <Information> BaseDaemon: Stop SignalListener thread
ничего не помогает( -
порт свободен
-
даже reboot?
-
даже рибут(
-
а возврат старого бинарника помогает?
-
еще не пробовал ...
-
-
-
/etc/clickhouse-server# sudo service clickhouse-server start
/etc/clickhouse-server# sudo service clickhouse-server status
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/lib/systemd/system/clickhouse-server.service; disabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Thu 2018-08-09 22:49:32 UTC; 1s ago
Process: 1820 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml (code=exited, status=70)
Process: 1814 ExecStartPre=/bin/chown clickhouse:clickhouse -R /etc/clickhouse-server (code=exited, status=0/SUCCESS)
Process: 1813 ExecStartPre=/usr/bin/chown clickhouse:clickhouse -R /etc/clickhouse-server (code=exited, status=203/EXEC)
Main PID: 1820 (code=exited, status=70)
CPU: 204ms
Aug 09 22:49:32 ubuntu-2gb-fra1-01 systemd[1]: clickhouse-server.service: Failed with result 'exit-code'. -
в логах пусто
-
если запускать так clickhouse-server --config-file=/etc/clickhouse-server/config.xml
2018.08.10 01:50:30.903804 [ 1 ] <Debug> Application: Loaded metadata.
2018.08.10 01:50:30.904167 [ 1 ] <Information> Application: Listening http://[::]:8123
2018.08.10 01:50:30.904248 [ 1 ] <Information> Application: Listening tcp: [::]:9000
2018.08.10 01:50:30.904311 [ 1 ] <Information> Application: Listening interserver http: [::]:9009
2018.08.10 01:50:30.904589 [ 1 ] <Information> Application: Shutting down storages.
2018.08.10 01:50:30.907096 [ 1 ] <Debug> Application: Shutted down storages.
2018.08.10 01:50:31.688774 [ 1 ] <Debug> Application: Destroyed global context.
2018.08.10 01:50:31.689365 [ 1 ] <Error> Application: Net Exception: Address already in use: 127.0.0.1:8123
2018.08.10 01:50:31.689395 [ 1 ] <Information> Application: shutting down
2018.08.10 01:50:31.689412 [ 1 ] <Debug> Application: Uninitializing subsystem: Logging Subsystem
2018.08.10 01:50:31.689523 [ 4 ] <Information> BaseDaemon: Stop SignalListener thread -
-
спасибо!)
-
убрать из listen_host все кроме ::
- 10 August 2018 (77 messages)
-
вот такой вопрос - я пытаюсь заимпортить New York Taxi data по гайду https://clickhouse.yandex/docs/en/getting_started/example_datasets/nyc_taxi/
-
-
-
Joined.
-
/stat@combot
-
подскажите по архитектуре схемы: есть распределенная табилца с шардами. Как лучше сделать materilized view на эти распределенные данные? можно сделать на распределенную таблицу, а можно на локальную и сделпть поверх этого distributed.
-
+ продублирую вопрос:
для знатоков CH+Superset: можно ли меять client timeZone при коннекте?
чтоб в superset показывать данные в другой timezone -
прочекал пинги вчера самый большой 15 мс , полет пока нормальный
-
Да, лучше всего сделать реплцированные MV на локальные таблы на всех репликах, поверх MV Distributed, так работает нормально
-
Судя по этому, нет:
Then the data must be pre-processed in PostgreSQL. This will create selections of points in the polygons (to match points on the map with the boroughs of New York City) and combine all the data into a single denormalized flat table by using a JOIN. To do this, you will need to install PostgreSQL with PostGIS support. -
Joined.
-
-
Всем привет, вопрос про функции работы с временем которые поддерживают таймзоны. Насколько я вижу по ошибкам параметр таймзоны должен быть константой, можно ли это как-то обойти? У меня в запросе таймзона всегда одна в рамках запроса но она должна браться из словаря. Пока что решил это тем что делаю два запроса со стороны приложения, сначала достаю таймзону а потом во второй запрос подставляю.
-
Всем привет! Пробую тут обновить кластер и после перезагрузки ноды начинают сыпаться такие исключения
DB::Exception: Received from clickhouse9:9000, 192.168.231.101. DB::Exception: Table is in readonly mode. Stack trace -
Что это значит?
-
привет. а насколько нормально создавать MATERIALIZED VIEW от Replicated* таблицы? Создал distributed, которая смотрит на вьюхи, и каждый запрос получаю разные значения.
-
обычно это случается когда отвалился зукипер
-
Ну с зукипером вроде всё ок
-
ну у меня таблица в риадонли уходила только когда нет зукипера , возможно есть другие причины для этого, надо болльше строк смотреть в ерорлоге кх
-
2018.08.10 10:31:33.137838 [ 38 ] <Error> executeQuery: Code: 242, e.displayText() = DB::Exception: Table is in readonly mode, e.what() = DB::Exception (from [::ffff:192.168.231.104]:58274) (in query: INSERT INTO metrika.productsites_log_local (Timestamp, Method, HttpStatus, HostName, UriPath, UriParam, Referer, RawUserAgent, ClientIp, PortalUserId, PortalSessionId, RequestLength, BytesSent, UpstreamResponseTime, EventDate, NgToken) FORMAT Values), Stack trace:
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x16) [0x56d1436]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x22) [0x2db80f2]
2. /usr/bin/clickhouse-server(DB::StorageReplicatedMergeTree::assertNotReadonly() const+0x72) [0x4fc9332]
3. /usr/bin/clickhouse-server(DB::StorageReplicatedMergeTree::write(std::shared_ptr<DB::IAST> const&, DB::Settings const&)+0x25) [0x4fc93b5]
4. /usr/bin/clickhouse-server(DB::PushingToViewsBlockOutputStream::PushingToViewsBlockOutputStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<DB::IStorage> const&, DB::Context const&, std::shared_ptr<DB::IAST> const&, bool)+0x718) [0x520c138]
5. /usr/bin/clickhouse-server(DB::InterpreterInsertQuery::execute()+0x23a) [0x4e6440a]
6. /usr/bin/clickhouse-server() [0x4ef181b]
7. /usr/bin/clickhouse-server(DB::executeQuery(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::Context&, bool, DB::QueryProcessingStage::Enum)+0x8a) [0x4ef283a]
8. /usr/bin/clickhouse-server(DB::TCPHandler::runImpl()+0x3d7) [0x2dc4c27]
9. /usr/bin/clickhouse-server(DB::TCPHandler::run()+0x2b) [0x2dc5acb]
10. /usr/bin/clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x58c56af]
11. /usr/bin/clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x16a) [0x58c5a8a]
12. /usr/bin/clickhouse-server(Poco::PooledThread::run()+0x77) [0x5966e97]
13. /usr/bin/clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x5962d58]
14. /usr/bin/clickhouse-server() [0x938cc0f]
15. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f00806586ba]
16. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f007fe8141d] -
ну должен быть еще же контекст выше и ниже
-
а место на диске случаем не закончилось ?
-
Может и прадва зукипер. У меня секция zookeeper-servers была в файле, вместе с секцией clickhouse_remote_servers.
Я перенёс zookeeper-servers в отдельный файл, сделал инклуд и оно похоже не завелось из-за этого -
Я не понимаю
-
ну верни как было
-
какой смысл менять конфиг и при этом еще и обновлять кх
-
-
недавно появилась ограниченная поддержка ON, но это ещё не всё, что запланировано в данном направлении
-
Joined.
-
Извиняюсь за вопрос не в тему кликхауса, но может кто подскажет куда копать. Пытаюсь скомпилировать с++ библиотеку GMP под win7-64, в оболочке MSYS. Выдает такую ошибку во время сборки: Error: unknown pseudo-op: `.hidden'
-
Joined.
-
Добрый день!
Подскажите, пожалуйста, как настроить проверку переполнения при insert. В конфигурации Кликхауса по умолчанию такая вставка проходит без ошибок:
CREATE TABLE default.test (
i32 UInt32
) ENGINE = Memory;
INSERT INTO default.test (i32) VALUES (123456789012345);
(проверял также для MergeTree - поведение такое же) -
Коллеги, добрый день!
Никто не сталкивался с таким явлением с матвью.
Есть два идентичных по результату запроса: один к таблице с детальными данными, второй к матвью. Запрос к таблице с детальными данными отрабатывает быстрее чем к матвью. Это первое.
И второе. В обоих запросах использутеся функция toStartOfFifteenMinutes. Так вот, запрос к детальным данным возвращает одно количество строк, а запрос к матвью в 10 раз меньше. Т.е. второй запрос пропускает какие-то времена. Хотя общие итоги совпадают.
Я перестал что-то понимать в матвью. У кого-то было что-то подобное?
П.С. Матвью создавалось на рабочей боевой таблице с ключевым словом populate. Т.е. во время работы команды CREATE MATERIALIZED VIEW... данные понемногу загружались в таблицу с детальными данными небольшими порциями (сотни-несколько тысяч записей в минуту, записываются не непрерывно, а квантами). Про то что таблицу надо "останавливать" для CREATE в курсе. Но в итоге общие count и uniq на таблице с детальными данными и матвью совпадают, потому сделал вывод, что рабочий процесс по загрузке данных не повлиял на матвью и данные не потерялись. -
Joined.
-
Доброго дня.
Никто не подскажет со следующей проблемой:
Есть слежующее железо: Dell PowerEdge T610 (http://www.dell.com/ru/business/p/poweredge-t610/pd)
Как носители информации используются обычные HDD, памяти ОЗУ тоже не сильно много, около 16Гб.
Нужно работать с большими выборками, при крупных запросах и операциях добавления данных сервер фризит.
Может ли решить проблему установка SSD, или же проблема скорее суммарно в слабом железе? -
https://github.com/LuaJIT/LuaJIT/issues/373 не ваш случай?Build fails with GNU Make v4.2.1 (MSYS2) #373
Complaining about buildvm_x86.dasc: Assembler message and such.
-
насколько я знаю - нет
-
У меня было что-то похожее, по моей вине, некоторые данные просто дублировались из-за неправльной репликации. Проверь запросом GROUP BY по какому нибудь уникальному полю
-
У меня таблица сама по себе, репликации нет. Проверил итоги на одном id, ситуация всё та же: общие итоги сходятся, а группировка по toStartOfFifteenMinutes даёт разное кол-во записей.
-
I
-
Как выглядит запрос на создание въюхи, какие запросы делаете и что ожидаете увидеть?
-
Создание:
CREATE MATERIALIZED VIEW td_stats.mvw_td_stats_site_zone_position_all_resp_by_15minute
ENGINE = AggregatingMergeTree(created_date, (created_date, position_id), 8192) POPULATE
as
select
created_date,
toStartOfFifteenMinutes(created) as created_15minute,
site_id,
zone_id,
position_id,
countState() as total,
uniqState(user_id) as unique
from td_stats.td_stats
group by created_date, toStartOfFifteenMinutes(created), site_id, zone_id, position_id
Запрос к матвью (время работы ~450 мс):
select
created_15minute as date,
toInt32(countMerge(total)) as total,
toInt32(uniqMerge(unique)) as unique
from td_stats.mvw_td_stats_site_zone_position_all_resp_by_15minute
where position_id = 6103
group by created_15minute
order by created_15minute
Запрос к таблице с детальными данными (время работы ~170 мс !!!):
select
toStartOfFifteenMinutes(created) as date,
toInt32(count()) as total,
toInt32(uniq(user_id)) as unique
from td_stats.td_stats
where position_id = 6103
group by toStartOfFifteenMinutes(created)
order by toStartOfFifteenMinutes(created) -
1) Для данного набора колонок у вас достаточно странный ПК
2) Если версия КХ >= 18.1.0, то смысла использовать AggregatingMergeTree нет, берите Summing и храните стейты только для того что нужно, например тотал легко считается без хранения состояния. -
Почему странный?
-
Что ещё не понятно так это общие количества строк - они разные:
select count() from
(
select
toStartOfFifteenMinutes(created) as date,
toInt32(count()) as total,
toInt32(uniq(user_id)) as unique
from td_stats.td_stats
where
position_id = 6103
group by toStartOfFifteenMinutes(created)
order by toStartOfFifteenMinutes(created)
)
select count() from
(
select
created_15minute as date,
toInt32(countMerge(total)) as total,
toInt32(uniqMerge(unique)) as unique
from td_stats.mvw_td_stats_site_zone_position_all_resp_by_15minute
where
position_id = 6103
group by created_15minute
order by created_15minute
)
Первый возвращает 1374, второй - 127. -
toInt32(uniq(user_id)) as unique -- это нельзя посчитать в MV.
u +u+u
1+1+1 = 3, а должно быть 1 -
В самом матвью для подсчёта уников использую uniqState(user_id). А в запросе к матвью использую uniqMerge(unique).
-
ясно, я не заметил.
-
но тогда как уже правильно заметили в order by нужен created_15minute
чтобы для каждого значения created_15minute хранились стейты -
Joined.
-
Всё так и есть. В матвью такой group by:
group by created_date, toStartOfFifteenMinutes(created), site_id, zone_id, position_id -
блин, в моей голове новый синтаксис partition by order by, я про ключ схлапывания AggregatingMergeTree, который PK aka sortkey
AggregatingMergeTree(created_date, (created_date, position_id, created_15minute) -
> > AggregatingMergeTree(created_date, (created_date, position_id, created_15minute)
Надо будет попробовать. Спасибо за совет! -
ну и если вы пишете
group by created_date, toStartOfFifteenMinutes(created), site_id, zone_id, position_id
то логично все тоже самое перечислить и в PK -
тогда агрегаты будут хранится для всех комбинаций значений
created_date, toStartOfFifteenMinutes(created), site_id, zone_id, position_id -
Да, матвью с таким определением AggregatingMergeTree(created_date, (created_date, created_15minute, position_id), 8192) POPULATE возвращает такое же количество записей как и запрос к таблице с детальными данными. Хоть с этим разобрался.
Но время выполнения почему-то больше у матвью. У матвью около 800 мс, у запроса к таблице с детальными данными около 170 мс. -
скорее всего uniqMerge работает медленно.
сколько строк во вью и сколько в таблице? optimize final ? -
быстро будет потом, когда не нужно будет ходить в таблицу и считать count поднимая данные за месяц, можно будет сходить во вью и посчитать сумму, взяв готовые каунты для всех 15 мин. интервалов, т.е. когда во вью будет млн строк, а в таблице миллиард.
-
а хотя с другой стороны, может и не будет быстрее, надо же все равно домерживать, т.е. во вью будет
u,u1,u2,u4
u,u1,u2,u3
u11,u111 -
В матвью - 476 078 записей.
В таблице с детальными данными - 299 304 710 записей. -
Запустил
optimize table td_stats.TMP_mvw_td_stats_site_zone_position_all_resp_by_15minute final
Теперь запрос к матвью отрабатывает за около 1.6 с. Время увеличилось вдвое.
Что я делаю не так? -
не знаю, вот мой тест 0.009 MV vs 0.148 Table
drop table z; drop table mvz;
create table z(d Date, u String) Engine=MergeTree partition by tuple() order by tuple();
CREATE MATERIALIZED VIEW mvz ENGINE = AggregatingMergeTree(d, (d), 8192) as select d, uniqState(u) as us from z group by d
insert into z select today(), concat('usr',toString(rand()%664579)) from numbers(10000000);
insert into z select today()-1, concat('usr',toString(rand()%664579)) from numbers(10000000);
select (uniqMerge(us)) as unique from mvz group by d order by d;
┌─unique─┐
│ 662715 │
│ 662715 │
└────────┘
2 rows in set. Elapsed: 0.009 sec.
select (uniq(u)) as unique from z group by d order by d;
┌─unique─┐
│ 662715 │
│ 662715 │
└────────┘
2 rows in set. Elapsed: 0.148 sec. Processed 20.00 million rows, 396.65 MB (135.45 million rows/s., 2.69 GB/s.) -
правда у меня строки схлапываются и во вью совсем мало строк (CH 18.6.0)
-
ну и если строк много и все запросы типа where position_id = 6103, я бы position_id поставил первым в PK чтобы спускаться сразу к нему
-
матвью пересоздал с прежним ключём. Время запроса по конкретному position_id прежнее - около 700-800 мс. Пересоздал матвью с ключом, в котором position_id поставил на первое место. Время выполнения запроса по position_id стало лучше - около 350 мс. Но всё равно, на таблице с детальными данными запрос отрабатывает быстрее - 170 мс.
-
Точнее так. Новое матвью создал совсеми ключами, какие перечислены в селекте, но position_id поставил на первое место:
AggregatingMergeTree(created_date, (position_id, created_date, created_15minute, site_id, zone_id), 8192) POPULATE -
ОК. А сколько строк и какое время
select count()
from td_stats.mvw_td_stats_site_zone_position_all_resp_by_15minute
where position_id = 6103 -
select count() from td_stats.TMP_mvw_td_stats_site_zone_position_all_resp_by_15minute where position_id = 6103
1 374 стр. За 12 мс.
select count() from td_stats.td_stats where position_id = 6103
1 862 345 стр. За 22 мс. -
тогда сделайте еще одно вью без site_id, zone_id
иначе неравноценное сравнение -
Матвью с только position_id:
CREATE MATERIALIZED VIEW td_stats.TMP_mvw_td_stats_only_position_all_resp_by_15minute
ENGINE = AggregatingMergeTree(created_date, (position_id, created_date, created_15minute), 8192) POPULATE
as
select
created_date,
toStartOfFifteenMinutes(created) as created_15minute,
position_id,
countState() as total,
uniqState(user_id) as unique
from td_stats.td_stats
group by created_date, toStartOfFifteenMinutes(created), position_id
Запрос с выбором конкретного position_id:
select
created_15minute as date,
toInt32(countMerge(total)) as total,
toInt32(uniqMerge(unique)) as unique
from td_stats.TMP_mvw_td_stats_only_position_all_resp_by_15minute
where
position_id = 6103
group by created_15minute
order by created_15minute
Время выполнения около 500 мс. Стало хуже. -
ну не знаю, возможно у вас такие хитрые юзеры, может из-за времени,
у меня MV делает таблицу, и если много уникальных пользователей и если мало
https://gist.github.com/den-crane/a72614fbe6d23eb9c2f1bce40c66893f -
user_id - fixedstring(24)
Так же есть hash_user_id - UInt64, содержит результат выражения sipHash64(toString(user_id)).
Пересоздал матвью с использованием этого хеша - uniqState(hash_user_id) as unique.
В итоге время чуть лучше стало, но не существенно.
И на том большое спасибо! Будем думать дальше. -
свопит может?
Но 16 ГБ вообще не вариант если данных много, и ssd не поможет, потому что запросы выполняются в памяти, тупо будет падать каждый второй запрос. -
примерно так и происходит. Сейчас база еще наполнена примерно только на 30%, объем базы уже привысил 300Тб.
Вот про ссд впервые подумал, когда по статистике I/O увидел то, что CH занимает почти весь тайминг у HDD.
Потом решил усомниться в своем предположении. На моей практике это первый проект с такими объемами. Толком вот не знаю, сколько по хорошему надо рессурсов и каких -
300 T или 300 Г ? От запросов зависит и их количества, посчитать тяжело, просто 16 сильно мало, особенно если запросы будут перетряхивать 300Г а потом агрегировать в памяти например 10, наверняка у вас под кеш линукса осталось 4.
-
300Gb, опечатался
-
тоесть я правильно понимаю, что больше важна тут ОЗУ, чем само дисковое хранилище?
- 11 August 2018 (74 messages)
-
зависит от запросов у меня на 2тб выходит 6 виртуалок по 8 гигов и 2 ядра пока хватат
-
Доброе утро, правильно я понимаю, что после INSERT батча в MergeTree движках новые данные для SELECT будут доступны сразу после завершения INSERT. Но если я хочу использовать специфику типа Summing/Collapsing/Replacing то мне нужно чтоб случился merge либо ипользовать FINAL ?
-
Для всех движков после INSERT данные будут доступны сразу, для Summing нужно всегда делать агрегацию. Движки в фоне, в зависимости от специфики, при мержах разным спосоом куски обрабатывают.
-
Привет. Подскажите пожалуйста, использую движок ReplacingMergeTree делаю count получаю 1.7млн записей делаю count с final получаю 580к записей, делаю optimize table но записи все равно не чистятся и результаты получаю такие же самые, в чем может быть причина? Ключ версии выбрал поле типа DateTime
-
Возможно вы делаете оптимайз не того партишига. Найдите запросом месяц, в котором есть хоть один дубль и вызовите для него оптимайз
-
Спасибо, попробую
-
Подскажите, какой Engine использовать для следующего кейса: постоянно создаются и меняются новые объекты (до 100 000 в сек) для разных пользователей, объект может быть в 3 состояниях - Started -> InProgress -> Completed (иногда Started->Completed), нужно считать количество объектов в каждом состоянии по каждому пользователю и выдавать их список за какой-то диапазон времени. Изменение состояния большинства объектов происходит в течние минуты. Финальное состояние хотелось бы видеть сразу в SELECT, а не после непредсказуемого merge. Первое, что приходит в голову, - вставлять запись о каждом состоянии в MergeTree (но непонятно, как выбирать только последний стейт каждого объекта) или ReplacingMT и делать SELECT FINAL (но, по тому, что я читал, скорость выборки падает в разы), а так же делать AggregatedMT MV для каждого состояния, чтоб считать объекты в каждом состоянии.
Есть какие-то best practice для подобной задачи в КХ? -
MergeTree
-
Например так:
2 поля start / complete
0 / 0 - start
1 / 0 - in progress
1 / 1 - complete -
Всегда можно узнать состояние
-
Он уже поддерживает update?
-
Ну или просто progress поле с 3 состояниями
-
И типом UInt8
-
Update на сколько я знаю только начинают вводить в кодовую базу
-
Как из него последнее состояние выбрать?
-
Where progress=3 если 1 поле
И
Where start =1 and complete =1 -
Last_value partition by насколько я знаю нет
-
Это не последнее состояние
-
Последнее состояние чего?
-
Объекта
-
Финальное состояние человек хочет в select
-
Update это по сути
select with change 1 field -
На данный момент
-
Ну
-
select count(*) from table where start =1 and complete=1
-
Если делать с 1 поле то подходит
-
Если ввести поле progress с 3 состояниями
-
Ок :) все теперь и я знаю про argmax
-
0 - start
1 - in progress
2 - complete -
В любой момент времени можно узнать когда и сколько и каких было состояний
-
-
А он и не пройдет
-
При MergeTree у вас остаются все 3 записи
-
Это более надёжно для вашей задачи
-
-
Да
-
Тогда вы не потеряете свои данные
-
А старые всегда можно сделать detach
-
И куда то сложить
-
-
-
-
-
-
В этом кейсе лишним не будет. Причем лучше date, state, user-id
-
-
Если это игра и результаты запроса нужны не для анализа постфактум, а для хода игры, то не полетит, кх eventual consistent и время выполнения запросов непредсказуемо и слишком медленно для маленьких выборок.
-
Joined.
-
-
Не, надо показать пользователю страничку с его объектами и аналитикой за неделю, мес, год
-
-
-
Joined.
-
-
-
Ну да, можно больше запросов делать. И можно тяжёлые запросы выполнять сразу двумя репликами, но это не всегда помогает и ускоряет не кратно числу реплик.
-
про фразу "кх eventual consistent и время выполнения запросов непредсказуемо и слишком медленно для маленьких выборок." - правильно, я понимаю, что это by design, то есть он не держит большое количество SELECT в принципе (условно говоря 1-3 в секунду - ок), но так как данные после INSERT доступны сразу для SELECT (как написали выше), то с этой точки зрения он консистентен?
-
-
Да, так
-
-
КХ невероятно быстро умеет перемолоть 50 млрд. записей на 10 нодах обработав данные за 2 года. КХ не заточен выбирать 10 записей.
-
https://felixit.blog/2017/07/04/clickhouse-zachem/
Очень хорошие слова
Самое важное, что следует запомнить и понять — эта база данных делалась не для вас и не для ваших задач.
Нужно особенности кликхауса превращать в плюсы для своего приложенияClickHouse: ЗачемДва англичанина ловят рыбу в Темзе. У одного дергается поплавок, он подсекает и вытаскивает прелестную русалку. Полюбовавшись ею, снимает русалку с крючка и бросает обратно в воду. Второй удивляетс...
-
-
-
-
тут самое сложное, это бить себя по рукам, чтобы не получалось негативного переноса навыков
-
-
-
-
Почти да )
-
-
Робяты, кто нить на Go использует эту библиотеку? "github.com/kshvakov/clickhouse". Никак не могу побороть сохранение в таблице поля, который является массивов UInt64. Может кто подскажет как?GitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouse
Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
Ребята, кто может подсказать по когортному анализу в Google Sheets, с помощью плагин Analytics Addon?
-
@kshvakov скорее всего подскажет )
- 12 August 2018 (15 messages)
-
Должно работать как и для любого другого значения INSERT INTO T (ColumnAUInt64) VALUES(?), в Exec передаете массив.
-
-
Joined.
-
-
Коллеги, а как так может получится что кх не переделывает -preprocessed файлы ?
-
-rwxrwxr-x. 1 clickhouse clickhouse 1583 авг 11 06:46 administrativedomain-preprocessed.xml
-rw-r--r-- 1 root root 1326 авг 12 11:15 administrativedomain.xml -
-
-
-
-
Почему бы и нет, но профит от кх в таких запросах сомнительный. Мы выгружаем несколько сот тысяч ежесуточно, пока ничего не сломалось :)
-
-
Выборка не полностью по pk. Отрабатывает достаточно быстро. Основное время - сеть и запись в dest выгрузки
-
Спасибо, буду тестить тоже
-
- 13 August 2018 (127 messages)
-
Доброе утро!
Есть запрос с JOIN. В результате получаем выборку и группируем ее.
В процессе этой группировки необходимо работать с количество строк в этом JOIN. Как получить это количество в том же запросе?
Например:
>SELECT A.name, sum(B.val) / count(B.date) FROM A JOIN B GROUP BY B.date
- count(B.date) в данном случае вернет конечно же количество строк в группировке, есть способ получить число строк в JOIN? -
Кто нить пользуется kafka table engine https://clickhouse.yandex/docs/en/operations/table_engines/kafka/? Для кого рода задач?
-
-
Собрать всё нужное во вложенном запросе, и уже в окончательном посчитать?
-
>JOIN (SELECT B.date, count())
- так нельзя сделать
Нужны отдельно каждая строка и количество этих строк
Можно было бы сделать как-то так, но это дополнительный ненужный запрос
>JOIN (SELECT B.date FROM B)
>JOIN (SELECT count() as count FROM B)
В процессе агрегирования (группировке) нужен доступ к оригиналу таблицы без учета агрегации -
Всем привет!
Пока не разобрался с этим, поэтому повторю вопрос:
Подскажите, пожалуйста, как настроить проверку переполнения при insert. В конфигурации Кликхауса по умолчанию такая вставка проходит без ошибок:
CREATE TABLE default.test (
i32 UInt32
) ENGINE = Memory;
INSERT INTO default.test (i32) VALUES (123456789012345);
(проверял также для MergeTree - поведение такое же) -
Никак, проверяйте на клиенте, перед отправкой
-
Приведите пример полного запроса, что именно вам нужно
-
-
-
-
Joined.
-
-
Joined.
-
Joined.
-
-
-
Joined.
-
Joined.
-
TABLE A: id, colA
TABLE B: id, colB
SELECT colA/(количество строк в табилце "В"), sum(colB) FROM A
ANY INNER JOIN (SELECT id, colB FROM B) USING id
GROUP BY colA
Возможно ли в процессе агрегации обращаться к неагрегированным данным таблицы? -
Joined.
-
Может как-то так
SELECT
colA / sum(bCount),
sum(colB)
FROM
A
ANY INNER JOIN (
SELECT
id,
colB,
1 AS bCount
FROM
B
) USING id
GROUP BY
colA
Но проще сделать отдельный запрос и явно подставить count() от B в запрос -
Предположу, что так он подсчитает число sum(bCount) для каждого colA, а не для всех, т.е. это так же с учетом агрегации
-
Знаю, что в CH есть есть комбинатор -State, подумал, может быть есть и такой, который будет обрабатывать данные на уровне "за группировкой"
-
Joined.
-
Привет всем!
пытаюсь подключитсья к CH через докер, не выходит.
docker run -it yandex/clickhouse-client:latest -h IP --port PORT -u USER --password PASS --database DBNAME
Code: 32. DB::Exception: Attempt to read after eof
В чем может быть проблема? -
А как докер сервера как запускали? PORT торчит наружу?
-
Я до этого только с идешки подключался, порт наружу
-
С табикса и идешки норм получается, в терминале через докер не получается
-
есть идеи в чем может быть проблема?
-
Joined.
-
Скорее всего проблема в том, что вы из докера, через слиент КХ, пытаетесь обратиться к порту, доступному из хоста (там, где докеры запущены). И вам нужно как-то прокинуть порт для докера (я не сильно разбираюсь), как-то так
https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248/4Accessing host machine from within docker containerExpected behavior I should have a way to access host machine from within container. Actual behavior Cant figure out how to do that with docker for mac beta Information With the change to all the docker images running on localhost and the ditching of virtualbox (which from what little I understand, made networking more difficult), I would think there would be a standard way to access the host machine from within the docker container. Is there a way to do this with docker for mac? All the docs r...
-
Но это не факт
-
убрал порт вообще, зашел, спасибо)
-
Здравствуйте. Подскажите по первичному ключу в MergeTree пожалуйста. ПК - это то, как кликхаус будет сортировать записи при вставке. И описывать ПК слишком детально, наверное, не стоит - скорость вставки может сиильно понизиться, верно?
Вставлять первым элементом в кортеж поле типа DateTime не очень хороошая идея? А если это DateTime всегда округлено до пяти минут (00:00:00, 00:00:05 etc т.к. метрики ко мне прилетают четко раз в пять миинут)? -
Для метрик DateTime в индексе отличный выбор ;)
-
-
DateTime
-
ну типа да. Просто зачем я вдруг подумал про DateTime в ПК: я внезапно захотел заюзать SummingMergeTree, чтобы оно мне метрики за одно и то же время по одним и тем же, скажем, связям суммировал.
-
У меня есть сценарий, когда по одному набору "измерений" прилетают счетчики по очереди: сначала counter1, потом counter2.
-
думал, устанавливать отсутствующие счетчики в 0 и позволять SUmmingMergeTree сразу же аггрегировать подобные записи. Вот такой пример у меня моей схемы: https://gist.github.com/azzz/c9e2d1cb4ec99184a4c790e820db504e
-
-
я думаю, Кирилл сарказмировал
-
-
-
соответственно, три пути:
- пусть программа группрует такие записи
- пусть группирует КХ - он умный.
- вообще не группировать прии вставке и не париться. -
@kshvakov ну, я эти строки в Dictionary вынесу. Тем более, что те строки - это вообще полная печалька, там... UUIDы.
-
-
Тогда FixedString(16) и все будет хорошо
-
в документации пишут, что с FixedString умеют работать не все функции и лучше его избегать. Но в принциипе, я не собираюсь проводиить манипуляции с ними.
-
Окей, но SummingMergeTree мержит записи не при каждом инсерте, а когда сам посчитает нужным. Т.е. вполне вероятен сценарий, когда я сделаю select и вместо одной записи получу 4 - т.к. еще не смержил, не успел.
Выходит, что group by прийдется делать всегда при селекте? -
таким образом, SummingMergeTree не то, чтобы сильно оптимизириует время получения данных, но зато оптимизирует процесс хранения, ага?
-
да, всегда нужно делать "доагрегированние"
-
Он сильно можнт оттимизировать все схлопнув 1кк метрик в 500
-
ну так-то да.
-
спасибо.
-
Не совсем понятно из документаци <allow_databases> нужно указывать в настройках пользователя или в настройках квоты?
-
Joined.
-
Пользователя
-
спс
-
-
в текущем roadmap-е нет https://clickhouse.yandex/docs/en/roadmap/
-
Что-то я не понимаю, а <allow_databases> это разве не оно?
-
Также, в необязательном разделе <allow_databases> можно указать перечень баз, к которым у пользователя будет доступ. По умолчанию пользователю доступны все базы. Можно указать базу данных default, в этом случае пользователь получит доступ к базе данных по умолчанию.
-
-
-
-
нет
-
Доступ к БД не связан с настройкой readonly. Невозможно дать полный доступ к одной БД и readonly к другой.
-
-
-
-
а chproxy не решает?
-
-
Joined.
-
-
Разграничение прав пользователей к разным бд #2858
Добрый день! Нам очень нужен функционал, который позволит разграничивать права доступа к бд внутри КХ. Например, у пользователя Х должен быть доступ на Запись к бд1 и только Чтение к бд2. Чтобы можно было реализовать такую логическую стр...
-
Есть две таблицы
1 таблица
домен дата и время посещения
ххх.ру 2016-12-31 21:02:07
2 таблица
домен дата и время перехода
ххх.ру 2016-12-31 20:48:07
необходимо заджоинить все случаи, когда переходы были с одного домена и примерно в одно время(1 час разброс)
Вопрос: как указать разброс через ON? -
-
в каком смысле полагаться?
-
-
-
-
Я тут себе в программу добавил кликхаус и половину кода пришлось удалить. Было на постгресе (мы положили 500 миллионов запсией в постгрес и он умер). КХ работает чудесно - я рад. Надеюсь, все глюки будут решаемы.
Но есть вопрос: кастомер меня спрашивает "а хренли КХ?". Мои доводы "я бы рад что угодно другое, но что под руку попалось то и взял т.к. до дедлайна у нас три дня, а со спарком мне времени разбираться нет". Однако, всякие там манагеры немного стремаются юзать столь молодое решение. Посему вопрос: есть ли какой-нибудь платный саппорт? Яндексу это нафиг не нужно, конечно, но может какая-то сторонняя компания, которую можно порекомендовать? -
платный саппорт на случай ответа на вопрос "у нас по постгресу огромный ноуледж, мы всё знаем, все знают поостгрес, а что делать с КХ если он упадет ааааааа"
-
(почему с огромным ноуледжом мы смогли ушатать постгрес и ничего не смогли с этим сделать - оставиим за кадром)
-
-
ну а ее порекомендовать кроме гугла кто-то может?
-
что это вообще за чувачки?
-
@alexanderzaitsev может рассказать вам кто они и чем занимаются
-
ага, CO-FOUNDER. Спасибо
-
Joined.
-
Подскажите пожалуйста, почему данные не вставляются, ругается на разделитель, там где значение пустое. Ведь в этом случае он по умолчанию должен 0 вставить?
-
Мы используем, для интеграции - много загрузчиков из разных источников пишут данные в кафку, КХ материализует данные пачками в БД.
-
можете привести строку, которая не вставилась? кажется там могут быть варианты в зависимости, есть кавычки или нет
-
"38855324,x,32691717,3158850595,5300453710,TEXT_AD,NONE,ON,ACCEPTED,Идут показы.,,,"Вернитесь, чтобы завершить заказ!",,"Вы не забыли про свой заказ в магазине? Он ждет Вас!",https://x.ru/cart.html,NO,x.ru,ваша-корзина,39100487,ACCEPTED,Контактная информация принята на модерации.,ACCEPTED,Отображаемая ссылка принята на модерации.,0,,,b2U77LytWaTeztLmelASvw,ACCEPTED,Изображение принято на модерации.,[],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
обернул в кавычки.
Попробовал вставить с CSV разделителем, тоже самое
Column 31, name: TextAdVideoExtensionCreativeID, type: UInt32, ERROR: text ",,,,,,,,,," is not like UInt32 -
есть подозрение, что массив с символами [] вносит такую ошибку, что там с его экранированием пходу
-
-
А проблему с json с вложенными объектами как-то решали? Или перевели в 1-уровневую структуру?
-
Я сталкивался с этим же и не решил проблему (перешёл на другой формат) Дай знать, если найдётся решение
-
😃 ладно
-
проблема возникла на пустом массиве, на первом скрине видно, поэтому до вложеннх еще не дошел
-
можно в виде двух запросов: один на create table, один на вставку clickhouse-clisent -q INSERT FORMAT CSV ?
-
-
в личку написал, чтоб не захламлять тут
-
принудительно проставил 0, нормально стало
-
При загрузке файла CSV через докер меняется часовой пояс у дат в файле.
Пытался и таймзону докера менять и таймзону контейнера-никак. Все равно меняется.
Подскажите, как фиксили? -
Меняется на что?
-
-
<!-- Server time zone could be set here.
Time zone is used when converting between String and DateTime types,
when printing DateTime in text formats and parsing DateTime from text,
it is used in date and time related functions, if specific time zone was not passed as an argument.
Time zone is specified as identifier from IANA time zone database, like UTC or Africa/Abidjan.
If not specified, system time zone at server startup is used.
Please note, that server could display time zone alias instead of specified name.
Example: W-SU is an alias for Europe/Moscow and Zulu is an alias for UTC.
-->
<!-- <timezone>Europe/Moscow</timezone> --> -
Никак не решали, используем плоскую структуру
-
Joined.
-
By default, the client switches to the timezone of the server when it connects. You can change this behavior by enabling the client command-line option --use_client_time_zone.
-
у меня был такой вопрос, клик не умеет нестед джейсон парсить, поэтому пришлось делать скрипт который сам смотрит в кафку и потом делает плоский джейсон. Дальше - можете писать это в другой топик xDDD
-
А как лучше поступить с полем, являющимся массивом обьектов?
-
-
авком парсил, но потом на самом деле уже в клик не пихал, у меня своя задачка была, надо было сделать что-то и быстро, поэтому кафка через баш скрипт в телеграф далее в инфлюкс и потом в графану
-
-
Она в бесплатном варианте лишь 1Тб ограничена
-
да, я понимаю что это дорого. да может быть и далеко не так красиво как клик в каких то вещах, но что делать.
-
-
-
-
Если есть время - то да, если нет, то склеить из того что есть под руками, гораздо проще распарсить самому тем же авком или jq и потом если есть желание отправить в кафку, консюмера и продюсера с использованием библиотек кафки сделать довольно тривиально, как выяснилосью Ну это как бы ап ту ю
-
yandex/ClickHouse was tagged: v18.10.3-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v18.10.3-stable
Release notes:
Auto version update to [18.10.3] [54405]yandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Joined.
-
Joined.
- 14 August 2018 (146 messages)
-
помоите пожалуйста, пытаюсь протестировать CH + BI тулзами, сейчас играюсь с jasperreports CE, не могу подцепить. JDBC driver
-
положил driver в папку с либами, но сервак его не видит
-
так же скачал report desigener, полодил драйвер рядом с MySQL драйвером, все-равно в UI оно не появляется
-
-
Подскажите пожалуйста, в каких случаях возникает ошибка при вставке данных:
Code: 117. DB::Exception: Expected end of line
? -
CSV на входе не соответствует ожидаемому: https://github.com/yandex/ClickHouse/blob/6b74ab870822d8487c7c710c0f9a0d53b45d1000/dbms/src/Formats/CSVRowInputStream.cpp#L50yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
спасибо
-
если верить их доке, то есть ещё вариант с загрузкой драйвера через веб-интерфейс https://community.jaspersoft.com/wiki/how-add-jdbc-driver-jasperreports-serverHow to add JDBC driver to JasperReports Server
This is a very easy and also popular question but in case of problems with this configuration I would like to remind you that if you would like to add a new JDBC driver to the application in all versions of the software in the releases: 3.* - 5.0.1: you should add jar file of JDBC driver to the lib folder of your application server in case of Apache-Tomcat it should be apache-tomcat/lib folder 5.1.0 - 6.0.1 (the most modern version, 13.04.2015): you can use approach from the suggestion above (apache-tomcat/lib folder) you can use web graphical user interface of your JDBC data source configurat
-
болт
-
-
-
-
Есть идея
-
открыл драйвер через eclipse
-
// Compiled from ClickHouseDriver.java (version 1.6 : 50.0, super bit)
-
./java/bin/java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12) -
Я не спец в java
-
но у yandex есть 2 билда, для 1.6, и 1.8
-
-
вот только как скачать билд для 1.8 пока не понял, на крайняк буду осваивать mvn, но если кто занет, то поделитесь инфой плз
-
как я понял, да
-
Возможно эта штука неправильно диагностику даёт и на самом деле проблема в отсутствии зависимостей, можно попробовать собрать ...-jar-with-dependencies через mvn package assembly:single -DskipTests=true
-
так лень устанавливать/разбираться с mvn =)
-
для начала попробую найти драйвер скомпиленый через JDK 1.8 и подсуну его, если не найду буду собирать jar
-
Коллеги, пожскажите, пожалуйста, на сколько клик удобен для такого рода задач (или может быть кто знает что по лучше): есть поток пар <a1,b11>,<a2,b21>,<a1,b12>.....где грубо говоря a-это набор статических аттрибутов документа, а b-динамических. Поток настолько велик, что использовать систему с update по id не годится. Задача: строить всяческую аналитику с использованием последних значений b для a.
-
Можно и попробовать прикрутить. Сделать AggregatingMergeTree, которое будет сразу агрегировать последние значения в разрезе An, и готово.
-
Парни, кто сталкивался с
[ 78 ] <Error> default.graphite (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
уже до последней версии обновил оба сервера, как только начинаю лить реплику на 2й, на превом выходит такая ошибка и пишет ежесекундно -
А aggMergeTree поддерживает distributing?
-
на обоих такое, что-то в данных первой реплики?
-
а после нее идет сразу:
[ 126 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Checking part 20180814_20180814_333681_333686_1
[ 126 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Checking if anyone has a part covering 20180814_20180814_333681_333686_1.
[ 126 ] <Warning> default.graphite (ReplicatedMergeTreePartCheckThread): Found parts with the same min block and with the same max block as the missing part 20180814_20180814_333681_333686_1. Hoping that it will eventually appear as a result of a merge. -
Подскажите пожалуйста. Возникли проблемы с удалением данных. Смотрю в таблицу system.mutations запросы в очереди просто висят. Это связанно только с одной таблицей, для другиз запросы выполняются судя по system.mutations. Может оттуда удалить записи? может поможет
В логах ошибка:
<Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 53, e.displayText() = DB::Exception: Types of column 1 in section IN don't match: String on the right, UInt32 on the left., e.what() = DB::Exception, Stack trace:
были такие запросы, где была синтакситечская ошибка, наверно с этим как раз связано -
У меня такое было, удаление зависалр на середине. Но я так и не разобрался что не так. Потрите что в лог КХ пишет
-
в общем похоже на то, что если использовать при удалении в секции IN только одно значение, то КХ удалить не может данные
Пример:
ALTER TABLE data.clients DELETE WHERE AccountID IN (38855324) -
Joined.
-
Joined.
-
Хотелось бы чтобы кто-нибудь выложил на ютуб видео по разворачиванию clickhouse кластера в самом простом варианте.
-
Не получится у большинства просто взять и разобраться.
-
Вот что например означает эта ошибка ?
-
-
Всем привет. Пробую настроить репликацию. Сделал два шарда по две реплики на каждом. Создание таблицы на одной ноде раскидывают таблицу на все ноды кластера. Это ок. А вот если делать alter table , то изменения появляются только в границах одного шарда. Подскажите это это норм или что-то недонастроил?
-
Покажите пожалуйста команду с помощью которой вы создали реплицируемую таблицу
-
CREATE TABLE IF NOT EXISTS test_db.events_shard ON CLUSTER test_cluster (
event_date Date DEFAULT toDate(now()),
company_id UInt32,
product_id UInt32
) ENGINE=ReplicatedMergeTree(
'/clickhouse/tables/{shard}/events_shard', '{replica}',
event_date,
(company_id),
8192
); -
Спасибо, а в {replica} в макросе указали имя сервера ?
-
Это норм
-
@kshvakov
Скажите пожалуйста
<macros>
<shard>01</shard>
<replica>example05-02-1.yandex.ru</replica>
</macros>
в поле реплика, должен быть указан ip адрес сервера ? -
или hostname ?
-
или не имеет значения что указанно в этом поле, главное чтобы оно отличалось от того же поля на другом сервере ?
-
Всеравно что - это просто идентификатор таблицы внутри шарда, чтоб понимать какие куски где есть
-
Спасибо за ответ !
-
-
А так называемая шарда должна быть указана обязательно ?
Нельзя на первом сервере указать просто:
<macros>
<replica>my_server_1</replica>
</macros>
А на втором сервере:
<macros>
<replica>my_server_2</replica>
</macros> -
Это просто макросы для подстановки, в Engine первый параметр нужен для "регистрации" реплики (таблицы которую нужно реплицировать, туда можно вписать что угодно и как угодно, с макроcами просто удобнее), второй параметр это идентификтор копии таблици для репликации, каждая копия получает задание не репликацию и тащит куски, если они будут одинаковые на разных серверах то у вас будет непонятно что;)
-
Вот я на первом сервере выполнил:
create table test_table_1 (MyDate Date, MyDateTime_1 DateTime, MyDateTime_2 DateTime) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_table_1', '{replica}', MyDate, MyDateTime_1, 8192)
где shard=01, replica=server1
А на втором сервере выполнил:
create table test_table_1 (MyDate Date, MyDateTime_1 DateTime, MyDateTime_2 DateTime) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_table_1', '{replica}', MyDate, MyDateTime_1, 8192)
где shard=01, replica=server2
================================
Все правильно сделал ? просто когда инсертнул в таблицу инфу, то вместо синхронизации я вижу только ошибки -
<Error> InterserverIOHTTPHandler: Code: 221, e.displayText() = DB::Exception: No interserver IO endpoint named DataPartsExchange:/clickhouse/tables/01/test_table_1/replicas/server_2, e.what() = DB::Exception, Stack trace:
-
а потом следующая ошибка:
2018.08.14 10:25:25.266948 [ 13 ] <Error> default.test_table_1 (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, Stack trace: -
и так по кругу идут, друг за дружкой
-
Вот и у меня так же было. Поэтому мы у себя пока не используем удаление
-
Так я ничего не удалял. Просто создал на обоих серверах одну и ту же таблицу, и вставил в нее данные.
-
insert into default.test_table_1 (MyDate, MyDateTime_1, MyDateTime_2) VALUES ('1990.01.01', '1990.01.01 12:00:00', '1990.01.01 12:00:00')
-
У вас там еще в ZK что-то лежит после "экспериментов" с созданием реплики. Если просто играетесь то удалите все таблици из КХ и удалите /clickhouse/ в ZK, потом снова стартаните сервер и создайте таблицы.
-
Вполне возможно что так. Сейчас все попробую и отпишусь. Спасибо !
-
🙏👍
-
<macros>
<shard>01</shard>
<replica>clickhouse_shard1_replica1</replica>
</macros> -
Вдруг кому то пригодится...
Для удаления конфигурации ClickHous'a из Apache Zookeper:
1) остановите все сервера clickhouse
2) войдите в клиент Apache Zookeeper
/opt/zookeeper/bin/zkCli.sh
3) выполните рекурсивное удаление дерева
rmr /clickhouse
4) Готово
quit
#zookeeper #удалить из zookeeper #удалить /clickhouse/ в ZK -
Благодарю !
-
Дропнул таблицу в кликхаус, выключил сервера CH, дропнул дерево в ZK, включил сервера CH. Затем создал таблицу на обоих серверах. Никаких ошибок не появилось. Потом сделал инсерт в созданную таблицу на первом сервере, после чего на втором сервере посыпались бесконечные такие ошибки:
-
-
А машины видят друг-друга по хостнейму ?
-
Да, телнет, в обе стороны проходит по портам 9000, 8123 и 9009
-
так, вот это странно No interserver IO endpoint named, я на такое еще не натыкался, надо посмотреть почему так может быть, но @milovidov_an может знать наверняка :)
-
Почему он ? Он разработчик?
-
Да, он может дать ответы на большинство вопросов, главное не злоупотреблять;)
-
Спасибо за совет, попробую с ним связаться.
-
так он тут
-
и достаточно часто отвечает на вопросы
-
Значит задам ему вопрос тут)
-
Только покопаюсь немного, может сам смогу понять в чем дело.
-
ага, а если alter сделать так
alter table test_db.events_shard on cluster test_cluster add column name3 String;
то выдает
An error occured before execution: Code: 371, e.displayText() = DB::Exception: Table events_shard is replicated, but shard #1 isn't replicated according to its cluster definition. Possibly <internal_replication>true</internal_replication> is forgotten in the cluster config., e.what() = DB::Exception -
Всем привет, подскажите по ALTER DELETE
есть таблица, в которой event_date Date MATERIALIZED toDate(timestamp)
ENGINE = CollapsingMergeTree(event_date, (affiliate_id, event_date, event_id), 8192, sign)
пытался сделать DELETE WHERE (player_id = 54182449) AND ((event_date >= '2018-08-06') AND (event_date <= '2018-08-07'))
получаю в лог кучу ошибок <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 10, e.displayText() = DB::Exception: Not found column event_date in block.
баг? и можно ли как то отменить эту мутацию, чтобы не летела куча ошибок в лог? -
-
show create table my_table;
-
-
Пытаюсь сделать доступным кликхаус только для одного ip-адреса. В config.xml добавляю <listen_host>some_ip</listen_host> Получаю ошибку <Error> Application: Net Exception: Cannot assign requested address: some_ip:8124 Подскажите, пожалуйста, что не так. <listen_host>::</listen_host> работает нормально.
-
надо "повесить" КХ на адрес или разрешить коннект с КХ с определенного адреса?
-
listen_host - это какой адрес будет прослушивать КХ
-
-
users.xml секция <users>-><username> в ней определяем секцию <networks><ip>1.2.3.4/32</ip></networks>
-
username - имя пользователя
-
у меня КХ крутится на сервере под NGINX, в нем все доступы и разруливаются
-
-
так по-моему более изящно
-
-
-
можно задать пользователя и пароль в секции <remote_servers> в конфиге https://clickhouse.yandex/docs/en/operations/table_engines/distributed/
-
спасибо, сейчас попробуем.
-
а по какой причине positionCaseInsensitive(haystack, 'needle') ничего не находит, хотя Like '%needle%' находит довольно таки много строк? Разве результат выполнения like в данном случае не должен быть подмножеством результата positionCaseInsensitive()?
-
-
Вопрос на тему мутаций. Запустил для датасета размером ~100 Gb мутацию. Селект из таблицы system.mutations не очень репрезентативный. Куда ещё поглазеть можно? В Zoo куда-нибудь, например, или ещё что
SELECT
*,
(now() - create_time) / 60 AS minutes_running
FROM system.mutations
Row 1:
──────
database: user_split
table: .inner.user_settings
mutation_id: 0000000000
command: DELETE WHERE settings_id = 0
create_time: 2018-08-14 13:33:59
block_numbers.partition_id: ['200101']
block_numbers.number: [3528023]
parts_to_do: 2
is_done: 0
minutes_running: 37.63333333333333 -
Больше особо некуда. Для реплицируемых таблиц есть столбец part_mutations_in_queue в system.replicas (плюс можно смотреть за задачами типа MUTATE_PART в system.replication_queue) - задания на мутацию кусков в очереди. И ещё есть системная метрика PartMutation - количество выполняемых в данный момент мутаций кусков.
-
Спасибо за ответ, но этой инфы не хватает для дебага (
SELECT
database,
table,
engine,
is_leader,
merges_in_queue,
part_mutations_in_queue
FROM replicas
WHERE table = '.inner.user_settings'
Row 1:
──────
database: user_split
table: .inner.user_settings
engine: ReplicatedAggregatingMergeTree
is_leader: 1
merges_in_queue: 0
part_mutations_in_queue: 0 -
Т.е. part_mutations_in_queue пустой для этой таблицы
-
Очередь реплики для всей схемы этой таблицы:
SELECT *
FROM system.replication_queue
WHERE database = 'user_split'
Ok.
0 rows in set. Elapsed: 0.096 sec.
И метрика нулевая:
SELECT *
FROM metrics
WHERE metric = 'PartMutation'
┌─metric───────┬─value─┐
│ PartMutation │ 0 │
└──────────────┴───────┘
1 rows in set. Elapsed: 0.108 sec. -
-
Можно ещё попробовать посмотреть, какие именно куски ещё осталось помутировать запросом вида select name from system.parts where active and table = '.inner.user_settings' and data_version < 3528023
-
А какая у вас версия?
-
-
Что-то дало!
SELECT
sum(rows),
if(data_version < 3528023, 'old', 'new') AS version
FROM system.parts
WHERE active AND (table = '.inner.user_settings')
GROUP BY version
┌──sum(rows)─┬─version─┐
│ 4574899817 │ new │
│ 6522625858 │ old │
└────────────┴─────────┘
Чтобы не значила магическая версия 3528023, уже какой-то результат. Если new - это результат работы мутации (а не новые данные, которые льются в таблицу), то значит за час у меня намутировало партиций на 4B строк, и надо подождать ещё пару часов. Доложусь по прошествии времени! -
Да, это баг - в помутированных кусках не сохраняются materialized столбцы.
-
-
-
Видимо этот баг и на мой случай распространяется, т.к. я пытаюсь мутировать вьюху
-
Тогда удалите из data-директории таблицы файл с мутацией ( /var/lib/clickhouse/data/<database>/<table>/mutation_<что-то>.txt ) и сделайте DETACH/ATTACH таблице
-
Вряд ли, т.к. тогда задачи всё-таки бы создавались в очереди
-
-
Магическую версию 3528023 я взял из стоблца block_numbers таблицы system.mutations. Это номер блока в партиции '200101', и нужно изменить все куски с номерами блоков меньше этого
-
-
так точно
-
New это как раз могут быть как свежие данные, которые льются в таблицу, так и успешно помутированные данные. А сколько вообще в таблице активных кусков с data_version < 3528023 и c data_version != min_block_number?
-
SELECT
count(),
if(data_version != min_block_number, 1, 0) AS version_equality
FROM system.parts
WHERE (table = '.inner.user_settings') AND active AND (data_version < 3528023)
GROUP BY version_equality
┌─count()─┬─version_equality─┐
│ 2 │ 0 │
└─────────┴──────────────────┘ -
-
На сервере-инициаторе, или по всем репликам?
-
-
Короче как только заменил все ip адреса в config.xml на имена, прописал соответствие имен ip адресам в /etc/hosts на обоих нодах, перезапустил сервера, и создал новые реплицируемые таблицы - все завелось.
правда пока не понял, в каком месте замена ip адреса на имя помогла...
буду методом тыка сейчас проверять, чтобы отловить момент. -
Ну и perf trace / strace никто не отменял, как средство дебага даже при полном отсутствии логов :).
-
Но почти час для мутации датасета в 100 Гб это как-то долго кажется, хотя, может, я придираюсь :).
-
У меня вот вообще получается заставить кликхаус крепко призадуматься довольно простыми, на первый взгляд, запросами:
-- CREATE TABLE stats ( date Date, metric_id Int32, uniq_state AggregateFunction(uniq, Int64));
SELECT
toStartOfDay(timestamp) AS dt,
uniqMerge(uniq_state)
FROM stats
WHERE (metric_id = 1234) AND date >= '2018-07-13' AND date <= '2018-08-13'
GROUP BY dt;
Показывает такие цифры:
30 rows in set. Elapsed: 0.927 sec. Processed 425.98 thousand rows, 61.98 MB (459.43 thousand rows/s., 66.85 MB/s.) -
чтения с диска при этом нет, всё помещается в оперативу
-
так тут как раз в перфе будет хорошо видно HLL* функции
-
Но 60 мб/сек, Карл! Обычно КХ хотя бы миллионы строк в секунду и гигабайты в секунду процессит 🙂
-
Возможно, при хранении агрегатных функций стоит поставить размер блока поменьше, чтобы мерж состояний мог в большее число потоков идти, но это моё предположение.
-
Joined.
-
Короче если кто то еще нактнется на проблему что репликация не работает, и видит ошибки типа:
DB::Exception: No interserver IO endpoint named DataPartsExchange
DB::StorageReplicatedMergeTree::queueTask() DB::Exception: Cannot read all data.
Решение простое:
Выключайте сервера ClickHouse.
в /etc/clickhouse-server/config.xml на серверах пропишете следующую строку:
<interserver_http_host>this_server_hostname</interserver_http_host>
где вместо this_server_hostname напишите реальное имя хоста.
Например если у вас есть два сервера которые называются server_1 и server_2
То соостветственно на первом сервере в конфиге пишите:
<interserver_http_host>server_1</interserver_http_host>
На втором сервере в конфиге пропишите:
<interserver_http_host>server_2</interserver_http_host>
на обоих серверах в /etc/hosts добавьте строки типа:
192.168.1.10 server_1
192.168.1.11 server_2
чтобы реальные hostname соотвествовали реальным ip адресам.
Включите сервера ClickHouse.
Теперь проверим что все работает.
Создаем на обоих серверах ReplicatedMergeTree таблицу и на одном из серверов производим наполнение в нашу таблицу. После чего проверяем что на втором сервере в таблице появилась информация тоже.
На всякий случай напишу, что если у вас все равно останутся такие же ошибки, попробуйте заменить все ip адреса упоминающиеся в файле /etc/clickhouse/config.xml на доменные имена. После чего не забудьте прописать все что нужно в /etc/hosts.
#инструкция #manual #решение проблемы #настройка репликации #репликация -
репликация по http?
-
я к тому, что у меня вообще нет такой настройки и, тфу тфу, всё работает как часы
-
По http или нет не знаю, но пока я не указал данный параметр у меня ничего не работало.
<interserver_http_host>server_1</interserver_http_host> -
Если я комментирую или удаляю данный параметр, и перезапускаю сервер, репликация перестает работать, и сервер пишет ошибки
-
получается типа, если данного параметра нет, сервер 1 не знает как называется сервер 2, и сервер 2 не знает как называется сервер 1.
-
Иначе я не знаю как это обьяснить
-
Вот что сказано в документации:
interserver_http_host
Имя хоста, которое могут использовать другие серверы для обращения к этому. -
я думал слово "могут" здесь ключевое, и данный параметр не обязателен
-
>uniqMerge
миллионы строк свернуты в несколько тысяч, при uniqMerge эти несколько тысяч схлапываются, получается скорость тысяча в секунду вместо млн.
aaaaa
bbbb
cccc
ddd
aaaaa,bbbb,cccc,ddd -
IP адреса можно было указать в interserver_http_host, там по дефолту для репликации хостнейм, а не IP используется и КХ, действительно, мог не видеть друг друга
-
Да, КХ по HTTP скачивает куски с реплик
-
если кому интересно: скачала исходники и сбилдил jar, подсунул jar с зависимостями и jasper server его принял через UI
-
собрал c openjdk 1.8
-
Joined.
- 15 August 2018 (93 messages)
-
-
-
-
слишком много листен хостов )))
-
с прошлого года не менялось, во 2-й строке только 127.0.0.1 был. Оставил :: после обновления и ошибок. Сейчас 1 строку оставил, взлетело
-
Приветствую, Михаил. Как решили проблему?
-
На одном шарде очистил одну колонку, на другом с некоторым геморроем проделал optimize table partition xxx.
-
-
Не всегда ругается на конкретное поле. Удалил таблицу на 2м сервере, пересоздал, реплика шла и в проессе появились:
<Error> default.graphite (StorageReplicatedMergeTree): Code: 40, e.displayText() = DB::Exception: Checksums of parts don't match: hash of uncompressed files doesn't match, uncompressed hash of compressed files doesn't match, e.what() = DB::Exception. Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.
и оно не проходит. На 2м сервере данные с 1го, что откудаКХ должен скачать? -
-
ок, спасибо,попробую. Иначе застревает, одни и те же мерджи делает. откатываеет, ни одной строки за 8 часов не вставляет ни одна из реплик
-
Всем привет.
У меня вопрос по импорту CSV tab separated в КХ.
Возникает проблема постоянно, что
1) КХ зажирает оперативу и не отпускает ее после заливки нескольких дампов (Code: 210. DB::NetException: Connection refused: (localhost:9000, 127.0.0.1))
2) не хватает памяти. - как следствие от заливки предыдущих дампов.
На борту:
12 ГБ оперативки
HDD 1Тб
Дампы по 500тыс. строк, весом 870Мб в несжатом виде.
В логах вижу что идут удаления, ренеймы папок и иная внутренняя работа - но оперативку не отпускает все равно. -
-
Параметры сервера дефолтные. Ubuntu 18.04
-
Ну и задача в том и состоит, чтобы заливать регулярные дампы в КХ. Как архивное хранилище информации.
-
Как запускать длительные запросы из cli ?
пробую OPTIMIZE TABLE graphite
Received exception from server (version 18.6.0):
Code: 209. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::NetException. DB::NetException: Timeout exceeded while reading from socket (192.168.148.16:9000): while receiving packet from graphite01:9000, 192.168.148.16.
0 rows in set. Elapsed: 300.284 sec. -
-
Запрос всеравно продолжит выполняться
-
спасибо
-
привет !
Подскажите как сделать выборку полей где ChannelID не является уникальным ?
count(ChannelID)>1
SELECT
Time, TimeMillisecond, OpenTime, CloseTime, State, ChannelID, OpenHeight, CloseHeight, ChannelPoint, Capacity,
Node1, Node1FeeBaseMSat, Node1FeeRateMilliMSat, Node1TimeLockDelta, Node1MinHTLC,
Node2, Node2FeeBaseMSat, Node2FeeRateMilliMSat, Node2TimeLockDelta, Node2MinHTLC
FROM lns.Channel
WHERE CloseTime>=toDateTime('2018-08-10 23:59:59') AND CloseTime<=toDateTime('2018-08-11 23:59:59') AND count(ChannelID)>1
ORDER BY (ChannelID, Time, TimeMillisecond) -
Звучит как group by + having
-
Привет всем. Если есть ошибки в данных, optimize table <tablename>
исправит ошибки?
...FINAL - поможет? -
Альтер?
ALTER TABLE Optimize ...? -
Да, optimize partition XXXX.
-
-
-
И прямо помогло? какая версия КХ? У меня в моменты выполнения optimize ошибки редели и вставка шла , до 50% от нормы, но через минуту перкращалась.
-
ок, спасибо ещё раз попробую. До и во время репликации
-
-
-
Привет! слышал, тут отвечают на вопросы по кликхаусу. Мне надо посчитать runningDifference вместе с group by, или посчитать разницу между соседними элементами массива. Есть сейчас такая возможность?
более подробно на stack overflow: https://stackoverflow.com/questions/51856397/clickhouse-running-diff-with-grouping
Спасибо.Clickhouse running diff with groupingGeneral Task A table consists of three columns (time, key, value). The task is to calculate a running difference for each key. So, from input --------------- | time | key | value | --------------...
-
-
Joined.
-
без reply или тегов не вижу вопроса. Логично, что optimize может блокировать вставки. Поэтому речь про отдельные проблемные partition.
Очевидно, что если я пишу «решил проблему вот так-то» - значит, помогло.
Возможно, придется оптимизировать куски по очереди на обеих репликах, если оптимизация одной не поможет. -
-
-
Спасибо. На одном все прооптимизирую и опять буду пробовать реплицировать.
-
-
вторую дропнул, без этого ни строчки не вставлялось, на 12 часов данные отстали, только удалил реплицируемую таблицу на 2м, первый начал писать и по 100М строк вставлял, за 2 часа все нагнал, сейчас на единственном все прооптимизирую и буду снова реплицировать. Ещё хотелось бы знать версю на которй все решилось, сейчас последняя, до перехода на неё не было ошибок.
-
-
Joined.
-
Есть такой enum ru.yandex.clickhouse.except.ClickHouseErrorCode, а где можно найти более подробное описание этих ошибок ? Или считается, что названия переменных уже говорящие и не требующие уточнений / комментария ? К примеру из непонятного LIMIT_EXCEEDED(290), тут может быть, что угодно за лимит
-
-
-
это в случае когда она уже произошла, мне же требуется написать обработчик ошибок, условно заранее заложиться на возомжные инфраструктурные проблемы, например, слишком большое кол-во мержей, слишком много выделено памяти, но читая вот этот список из 300+ ошибок , как мне показалось не все говорящие
-
-
-
-
-
))
-
Joined.
-
Откройте регистрацию на митап, человеку зарегестрировать надо
-
Добрый день. Пишем скориноговую модель на базе альтернативных источников данных. Хотим к вам, есть места? Спасибо
-
Боюсь там уже совсем битком @Alexander_Anisimov
-
Места закончились
-
Да, полный зал
-
Тогда, кто уступит свое место, наверняка не всем интересно
-
-
Доброго времени суток, я же правильно понимаю что файл users.xml обновляеться в рантайме, и если я добавлю дефолтную настройку для сохранения логов запросов она автоматически подсосется?
-
есть ручка для обновления конфига: SYSTEM RELOAD CONFIG
-
Спасибушки
-
Подскажите плиз чем может быть вызвана данная ошибка :
2018-08-15 12:55:26,547 [myid:] - INFO [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@653] - Got user-level KeeperException when processing sessionid:0x100015ef7a00002 type:create cxid:0x25 zxid:0x40 txntype:-1 reqpath:n/a Error Path:/clickhouse/tables/02/events_shard/mutations Error:KeeperErrorCode = NodeExists for /clickhouse/tables/02/events_shard/mutations -
Тупой вопрос по TABIX , если закрыть ту или иную вкладку, то непонятно как ее потом открыть? где они сохраняются?
-
никак
-
-
-
-
ничего себе открытие)) я давно уже пользуюсь табиксом, но не знал, потому что видимо не пригождалось. Кстати есть очень удобная бесплатная кросплатформенная IDE DBeaver.
-
Там к кликхаусу в два клика подключаешься
-
Всем привет. выполняю запрос вида:
SELECT
COUNT(eventDate) AS clicks
FROM (
SELECT
FROM
ALL INNER JOIN USING
PREWHERE qtype='pv'
WHERE
)
ANY INNER JOIN (
SELECT
FROM
PREWHERE
WHERE
) USING
WHERE
GROUP BY
и раз в ~10 запросов count для одной из строки результата получается на 1 меньше(8 вместо 9), чем нужно.
Есть альтернативный запрос, он всегда возвращает верный ответ.
Если выполнить запрос без агрегации с фильтром по нужным данным, то количество строк верное(9 всегда)
Мне не даёт это покоя, что count не постоянен
версия 18.1.0 -
Connected to ClickHouse server version 18.6.0 revision 54401.
У меня все решилось без нового апдгрейда, просто разумные мерджи. -
-
eventDate не может быть NULL?
-
нет
-
Всем привет.
SELECT
programId,
countIf(windowId={know_this_value_for_each_programId}) as firstWindow,
countIf(windowId={know_this_value_for_each_programId}) as lastWindow
FROM smth
WHERE programId IN (1,2,…)
GROUP BY programId
как мне подставить know_this_value_for_each_program_id? Словарь вида {programId: {‘firstWindowId’: x, ‘lastWindowId’: y}} могу составить в приложении, а дальше что? Создание временной таблицы и инсерта данных всех элементов, встречающихся в IN, при каждом селекте? Или внешний словарь? Что лучше? -
нашёл, проблема в логике
-
<macros>
<layer>05</layer>
<shard>02</shard>
<replica>example05-02-1.yandex.ru</replica>
</macros>
в реплика мы указываем свой айпишник (хост) или айпишник (хост) нашей реплики? -
-
я указывал свой hostname
-
я тоже, но как правильно не понятно
-
то есть если мой сервер, на котором развернут сервер clickhouse называется server_1. то в макросе я пишу <>server_1</replica>
-
На всех машинах должно быть разное, а IP или Hostname неважно, можно что угодно писать туда
-
разное оно и так будет, я к тому что туда вписывать - себя или свою реплику?
-
пишите hostname и 100% все будет работать
-
чей? Свой или своей реплики?)
-
Машины на которой конфиг
-
верно
-
спасибо
-
Использование словарей как-то на зукипере может сказываться? Наблюдаю подозрительный скачок нагрузки и трафика на зк с момента деплоя конфига со словарем.
-
здравствуйте. такой вот вопрос:
sumMap(k, v) в качестве k умеет работать только с интами и флоатами(по крайней мере, для 18.6.0 это так, как я экспериментальным путём выяснил).
есть ли в планах расширение функционала до строк?
как временное решение, сделали из строк енум, суммап его ожидаемо корректно обработал, но если нам енума не хватит, будет неприятно. -
-
так строки и не надо. строки хотелось бы использовать в качестве ключей
-
- 16 August 2018 (59 messages)
-
-
Нет, не должно.
-
Пока можно использовать функции хеширования для преобразования строк в Int64 и таким образом решить проблему, но, с sumMap есть еще одна фича, данные должны помещаться в память, что не всегда возможно (вот это надо править).
-
Joined.
-
-
вы только что натолкнули меня на мысль, что строки то у меня короткие, до 5-7 символов(утф8 правда), так что теоретически можно попробовать реинтерпретировать строку в фиксд стринг(8) а потом в инт.
спасибо, добрый человек, доберусь до консоли, попробую -
Стоит ли использовать ch для оперативных отчётов без агрегации с выборкой большого количества колонок с фильтрация по датам, Пробовал погираться, уперлось в memory limit, может быть есть хорошая практика как это делать или не делать.
-
Да, просто настрйки max_bytes_before_external_sort, max_bytes_before_external_group_by и max_memory_usage_*** покрутите
-
Спасибо!
-
подскажите плиз)
-
А это не одно и то же? Как внутри работают словари?
-
Подскажите, а почему происходит вот так:
DB::Exception: Too many parts (302). Merges are processing significantly slower than inserts
При этом
графики выглядят вот так: -
-
Потому, что куски в партиции нужно смотреть в system.parts ;)
-
-
спасибо
-
-
ответил на SO.
-
Спасибо. Скоро посмотрю.
-
-
Так DataGrip и так же поддерживало ClickHouse
-
Мы его как минимум месяца два используем
-
-
С нативной поддержкой синтаксиса используете, да?
-
Всем привет.
Пытаюсь вставить несжатых данных 30гб в clickhouse через chproxy
curl -XPOST -T "./db1.table2.dump" -u username:password "http://chproxy:9090/?query=INSERT%20INTO%20db1.table2%20FORMAT%20Native"
chproxy возвращает
DEBUG: 2018/08/16 10:18:00 proxy.go:115: [ Id: 154B3C1CDF2C71F3; User "global-writer"(1) proxying as "default"(1) to "clickhouse1:8123"(1); RemoteAddr: "192.168.1.5:45926"; LocalAddr: "192.168.1.10:9090"; Duration: 1m0.006860656s ]: request failure: non-200 status code 499; query:
Не могу понять на какое ограничение натыкаюсь, данные напрямую в clickhouse льются без проблем. Может быть кто-нибудь сталкивался и сможет подсказать в какую сторону копать? -
Ошибка на стороне clickhouse если заливать через chproxy:
<Error> HTTPHandler: Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 5. Bytes expected: 8., e.what() = DB::Exception, Stack trace:
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x16) [0x56d1436]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x22) [0x2db80f2]
2. /usr/bin/clickhouse-server(DB::ReadBuffer::readStrict(char*, unsigned long)+0x1c1) [0x2dc9ed1]
3. /usr/bin/clickhouse-server() [0x47bbe0c]
4. /usr/bin/clickhouse-server(DB::DataTypeString::deserializeBinaryBulk(DB::IColumn&, DB::ReadBuffer&, unsigned long, double) const+0x160) [0x47bcbb0]
5. /usr/bin/clickhouse-server(DB::NativeBlockInputStream::readData(DB::IDataType const&, DB::IColumn&, DB::ReadBuffer&, unsigned long, double)+0x113) [0x476e593]
6. /usr/bin/clickhouse-server(DB::NativeBlockInputStream::readImpl()+0x967) [0x476f2c7]
7. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
8. /usr/bin/clickhouse-server(DB::InputStreamFromASTInsertQuery::readImpl()+0x28) [0x4ef3408]
9. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
10. /usr/bin/clickhouse-server(DB::copyData(DB::IBlockInputStream&, DB::IBlockOutputStream&, std::atomic<bool>*)+0x81) [0x477f3d1]
11. /usr/bin/clickhouse-server(DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>)+0x1a3) [0x4ef2a53]
12. /usr/bin/clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x3147) [0x2dd2a37]
13. /usr/bin/clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x248) [0x2dd4b48]
14. /usr/bin/clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x332) [0x58cce02]
15. /usr/bin/clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x58c56af]
16. /usr/bin/clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x16a) [0x58c5a8a]
17. /usr/bin/clickhouse-server(Poco::PooledThread::run()+0x77) [0x5966e97]
18. /usr/bin/clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x5962d58]
19. /usr/bin/clickhouse-server() [0x938cc0f]
20. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76db) [0x7f584972d6db]
21. /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7f5848eb488f] -
Joined.
-
похоже на какую-то ошибку формата передачи данных. можно попробовать сделать tcpdump и посмотреть wireshark-ом разницу между вставкой через прокси и напрямую. Выглядит так, что кликхаус ждет больше данных, чем ему передали
-
-
Joined.
-
Господа, подскажите пожалуйста где и в каком формате кликхаус хранит словари
-
не конфиги, а сами данные, которые он засинкал уже
-
-
нет ли способа проверить по определенному айдишнику наличие записи в словаре?
-
-
Спасибо
-
create database dictionaries ENGINE = Dictionary, потом заселектить из таблицы
-
Всем привет! Подскажите, пожалуйста, как Кликхаус определят живость реплики? Можно ли как-то тюнить это процесс?
-
Можно настроить отставание в секундах для distributed запросов, а так смотрит на флажек в ZK при кворумной вставке и на лаг для distributed запросов если он выставлен
-
-
-
cat filename возможно поможет
-
-
Можно ли как-нибудь вручную вызвать обновленние словарей?
-
system reload dictionaries
-
огромное спасибо
-
А как вообще определятся что реплика доступна на чтение при дистрибьютед запросах? Ноды кх как-то пингуют друг друга?
-
Что должно произойти, чтобы реплика была исключена из списка "живых"?
-
Сервер просто ретраит запросы
-
system reload dictionary ddddd;
или все сразу system reload dictionaries; -
спасибо
-
ну или touch dddd.xml
-
Моя не понимат) Есть какой-то таймаут на коннект или на выполнение запроса после которого запрос пойдет на другую реплику?
-
а chproxy не умеет вести access log?
-
Вот тут всё есть https://github.com/yandex/ClickHouse/blob/d8ca4345b62afd2be166a430c5c136960eca5baf/dbms/src/Interpreters/ClusterProxy/SelectStreamFactory.cpp ;)yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
Ох, я опасался такой ссылки, спасибо)
-
-
Joined.
-
Joined.
- 17 August 2018 (133 messages)
-
Можно подробности получить? У меня получилось заставить работать как оперативные отчеты так и MDX, так же удалось подцепить query designer, schema workbench
-
Тестирую на тестовых данных, результат агрегации в Pivot4j сходится с результатами из консоли
-
Может кто-то объяснить про internal_replication ?
Из документации не очень ясно -
Деталей я не помню уже, помню что ни один инструмент по итогу не заработал. Может что-то с тех пор поменялось в кх или пентахо? Как настраивал? Были танцы с бубном?
-
Для distributed таблиц значит что нужно ли им самим писать во все реплики или в кластере или достаточно в одну т.к. та реплицируется сама. Плюс примерно тоже самое для ALTER TABLE ON CLUSTER X
-
ну вот у меня create table расбрасывается по всем нодам класетера без этой опции, а вот alter работает на всех только при включенной опции <internal_replication>true</internal_replication>
-
ДА
-
учитывая что машин в кластере может быть много и они могут добавляться, почему по умолчанию эта опция выключена? Это же чертовски удобно
-
Потому, что это афектит запись в distributed таблицы, а шардов не так много и можно на каждом альтер забубенить
-
т.е. лучше ее выключенной держать?
-
-
ясно. Спасибо
-
-
Тут статью в википедии собираются удалять
https://ru.wikipedia.org/wiki/Википедия:К_удалению/15_августа_2018#ClickHouseВикипедия:К удалению/15 августа 2018список всех кандидатов на удаление
-
Кто-нибудь в курсе как этому можно помешать?
-
Поробовать залогиниться и оставить коментарий
-
Википедия:Что делать, если ваша статья стала кандидатом на удаление
Вашу статью хотят удалить?! Некоторые участники смело создают новую статью, но вскоре другие участники её помечают к удалению, и это обсуждается на странице Википедия:К удалению. Так бывает. Статьи, не соответствующие формату Википедии или противоречащие правилам, удаляются, если сообщество согласится с этим. В очевидных случаях статьи помечаются к быстрому удалению без обсуждения. Однако бывают случаи, когда статью ставят на удаление другие участники, не согласные с точкой зрения, выраженной в статье, или негативно относящиеся к теме, которая в ней затронута. В таком случае конструктивное обсуждение (см. ниже) поможет сохранить статью.
-
"ссылки на сам Яндекс не считаются независимыми" вот это маразм дичайший. Какого хера ?
-
если яндекс это разработчик, где по их мнению должны размещаться ссылки?
-
Доля правды есть, я думаю это воспринимаемся как топик который создала компания, без значимый пользы остальным
-
субъективщина чистой воды
-
MongoDB
документоориентированная СУБД с открытым исходным кодом
-
в чем различие?
-
пусть в статье вики укажут ссылку на гитхаб с исходниками, мало ли
-
Как минимум в
Литература
Кайл Бэнкер. MongoDB в действии = MongoDB in Action. — ДМК Пресс, 2014. — 394 с. — ISBN 978-5-97060-057-3.
Kristina Chodorow. MongoDB: The Definitive Guide, 2nd Edition. — O'Reilly Media, Inc., 2013. — 432 с. — ISBN 978-1-4493-4468-9.
David Hows, Peter Membrey, Eelco Plugge, Tim Hawkins. The Definitive Guide to MongoDB: A complete guide to dealing with Big Data using MongoDB, Third Edition. — Apress, 2015. — 376 с. — ISBN 978-1-4842-1183-0.
Eelco Plugge, Peter Membrey, Tim Hawkins. The Definitive Guide to MongoDB: The NoSQL Database for Cloud and Desktop Computing. — Apress, 2010. — 327 с. — ISBN 1-4302-3051-7.
Mithun Satheesh; Bruno Joseph D'mello; Jason Krol. Web Development with MongoDB and NodeJS - Second Edition. — Packt Publishing, 2015. — 300 с. — ISBN 978-1-78528-745-9.
Steve Hoberman. Data Modeling for MongoDB. — Technics Publications, 2014. — 226 с. — ISBN 978-1-935504-70-2.
Mitch Pirtle. MongoDB for Web Development. — Addison-Wesley Professional, 2011. — С. 360. — ISBN 9780321705334. -
Плюс в примечаниях ещё есть
-
я ж говорю, добавить в примечение ссылки на гитхаб и на тот же habrahabr (там статей хуева туча)
-
На хабре статьи от Яндекса, можно на бложик Cloudflare ссылки дать.
-
не только от яндекса
-
и абсолютно правильно собираются. Не понимаю вашего возмущения. Статья действительно незначима.
-
https://habr.com/post/322620/
https://habr.com/post/324846/
https://habr.com/company/oleg-bunin/blog/351308/
как минимум они не от яндексаПереезд на Yandex ClickHouseАлександр Зайцев отвечает на вопросы относительно переезда на Yandex ClickHouse. Это — расшифровка доклада Highload++ 2016. Всем здравствуйте! За эти два дня...
-
-
Возмущение в том, что причины высосаны из пальца
-
-
Статья по кликхаусу тоже имеет смысл. Как минимум чтобы люди познакомились и перешли на более узкоспециализированные блоги по теме
-
википедия не для этого придумана, не для знакомства с.
-
А для чего?
-
и для знакомства в том числе
-
ну сама по себе статья ничего нового по сравнению с документацией не превносит. Хотелось бы увидеть отдельным разделом упоминания, отдельным — список проектов, которые используют, отдельным — мнения о том, почему кликхаус хорош, почему плох, с кем его корректно сравнивать, с кем — нет.
тогда это было бы да. А так — эту информацию любой интересующийся кх и так найдёт, а тому, кто не интересуется конкретно кх, это не будет полезно, мне кажется.
хотя, как знать. -
Ну мне кажется что статья быть дожна, как минимум потому что в статье про колоночные СУБД должны быть ссылки на статьи и по Vertica и по Clickhouse
-
Очевидно что каждый останется при своем мнении
-
-
хм. искал в свое время колоночную субд, пока меня знакомый в кх не ткнул, я про него даже не слышал
-
Не могу с вами согласиться)
-
так что не все так однозначно
-
у меня точно та же история.
-
ну вертика там упоминалась а кх нет
-
и это мягко говоря странно
-
вот вот
-
и еще там упоминаются гуглячьи решения, которые вообще исключительно внутренние
-
что еще страннее
-
-
логично
-
ну это ж логиниться надо...
-
-
Всем привет! Вчера на митапе в СПБ говорилось про табличную функцию odbc наряду с другими табличными функциями, но в документации по ней информации нет (а по другим есть). Где можно найти информацию?)
-
odbc (odbc connect string, table)
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
Дальше описание имеется
-
Спасибо!
-
-
-
-
добрый день! А можно где-то увидеть презентации по вчерашнему митапу в Питере?
-
Joined.
-
Я полагаю, что Алексей чуть позде выложит все и напишет
-
Спасибо
-
Вообще рано или поздно все презентации выкладываются тут https://github.com/yandex/clickhouse-presentationsClickHouse/clickhouse-presentations
Presentations, meetups and talks about ClickHouse. Contribute to ClickHouse/clickhouse-presentations development by creating an account on GitHub.
-
Поправил статью на википедии, думаю теперь должно быть ок. Почитайте / поправьте если что-то плохо получилось, или очепятки какие-то. https://ru.wikipedia.org/wiki/ClickHouseClickHouse
ClickHouse — это колоночная аналитическая СУБД с открытым кодом, позволяющая выполнять аналитические запросы в режиме реального времени на структурированных больших данных, разрабатываемая компанией Яндекс .
-
-
-
-
Нет, но можете через временную таблицу перегнать.
-
-
Мы и IPv4 и v6 храним в одном поле, поэтому нам, например, для этого нужен FixedString(16)
-
-
-
нет, они лежат в бинарном виде
-
uint64+uint64 же
-
-
-
Joined.
-
👍
-
https://github.com/roistat/go-clickhouse вот тут люди похоже на уровне библиотеки превращают ip в numGitHub - roistat/go-clickhouse: Golang ClickHouse connector
Golang ClickHouse connector. Contribute to roistat/go-clickhouse development by creating an account on GitHub.
-
Joined.
-
Добрый день.
Скажите пожалуйста, процесс репликации проходит через Zookeeper'ы, или ClickHouse ноды прямиком общаються друг к другу ? -
Вот например я сделал Альтер
-
Как информация об этом накатывается на другие сервера ClickHouse ?
-
Информация о том что сервер проделал Альтер передается в Zookeeper, там все таблицы должны привезтись к такому же виду в Zookeeper, после чего другие ClickHouse сервера подтягивают изменения с Zookeeper, верно ?
-
Там задачи в ZK для серверов в кластере ставятся и они их выполняют
-
То есть то что я выше написал правильно ?
-
Да, для репликации ведется лог и который пишется в ZK (не данные) и все сервера этот лог "проигрывают", напрямую они не общяются между собой, единственное обращение - это стягивание кусков по http
-
".... единственное обращение - это стягивание кусков по http...."
Каких кусков ? самих данных ? -
Да, данные в КХ кранятся кусками
-
То есть репликация идет не только через Zookeeker.
Она сначала выполняется на Zookeeper, а потом данные передаются не посредственно между серверами -
Нет, там все примерно так: данные пишутся на диск, в ZK добавляется запись о новом куске в таблице, сервера видят что куска у них нет и скачивают его (упрощенно).
-
сырые данные по сайтам лучше собирать в разные базы и потом методом кластер стотроить общий отчет? или лучше все в одну базу пушить?
-
Пишите все в одну таблицу
-
А теперь понятно) спасибо ! 👍
-
-
-
-
В смысле? Почему интовое поле и без принудительного привидения возвращает стринг
-
-
потому что format JSON, не?
-
Просто буквально пару дней назад возвращался нормальный инт, а теперь стал стринг...
-
-
output_format_json_quote_64bit_integers │ 1
-
-
Исправил, спасибо
-
Joined.
-
Добрый день,
есть возможность как нибудь ускорить WHERE t IN (SELECT ...), если известно, что возвращаемое во вложенном SELECT множество сортировано ? -
Joined.
-
Убедится что t в индексе и убедиться что у вас не сильно старая версия и она использует ПК для IN
-
У нас t - это tuple(test_id, tun_id), и оба они ПК:
ORDER BY (test_id, id)
и в таблице внутреннего SELECT, и во внешней таблице тоже.
Можно ещё что-то сделать для того, чтобы ускорить эту часть запроса? -
-
Господа, а можно как-то примерно прикинуть, сколько по времени КХ будет делать optimize table ... final?
-
остановить КХ, скопировать data и metadata на другую машину, запустить КХ
-
А пути в конфигах прописаны?
-
-
Понял, спасибо
-
В КХ есть возможность получить лог/отчёт/метрики по запросам и сожранными ими CPU time
-
И есть ли возможность каким либо способом в рамках явно заданного временного интервала, повторно не исполнять одинаковые запросы. Регистрировать их где-нибудь в системных таблицах КХ и результаты работы самого первого запроса отдавать остальным клиентам
-
Мы можем это сделать в редисе или где-нибудь ещё, но мы любим КХ и не любим тратить ресурсы
-
:)
-
Только анонсирована (вчера) вощможность получать метрики по реальному CPU и IO time по запросам.
-
Ооооо супер
-
Пока нет кэша запросов - придётся на своей стороне.
-
были конечно, если руки дойдут то опубликую how-to
-
Joined.
-
Подскажите, пожалуйста:
1. Лучше мощная машина или несколько средних нод для кластера?
2. Если лучше ноды, то можно ли без даунтайма докинуть еще нод в существующий кластер?
3. Увеличивается ли линейно скорость выполнения запроса с количеством нод пусть и со снижением производительности до полной синхронизации? (Можно ли просчитать стоимость железа исходя из объема данных и требуемых RPS).
4. Апгрейд на минорную версию сложная задача по сравнению с постгресом?
5. Есть ли готовые инструменты бэкапа или достаточно стянуть data и metadata?
6. Можно ли развернуть сначала в простом варианте без кафки и реплик и по мере необходимости докидывать ресурсы, либо лучше сразу организовать кластер? -
1. Несколько средних лучше (быстрее), чем одна жирная, как правило.
2. Можно, перечитает на лету
3. Зависит от запроса, но за то же время в n раз данных параллельно считывается с диска больше, но есть накладки на получение их на мержащей ноде и на процессе мержа результата
4. Не пробовали даунгрейдить
5. Про готовое не слышал, есть варианты с FREEZE PARTITION, почитайте в доке
6. Не кафки, а зукипера, наверное, а вообще вам решать насколько доступны должны быть данные, если вы можете себе позволить восстанавливаться n времени из бэкапа/tsv/чего угодно, то можно и без реплик=) Кстати, кластер -- это не обязательно конфигурация с репликацией, можно просто несколько шардов и без нее, и зукипер не нужен -
Спасибо!
- 18 August 2018 (31 messages)
-
Не увидел там в списке компаний Сми2 которые используют КХ :) может плохо искал
-
-
-
-
добрый день,
ситуация - есть сотни дампов из postgres, по несколько гигабайт каждый. каков наиболее эффективный способ залить это в КХ?
По всей видимости эти дампы придется первоначально залить в postgres. Есть ли возможность прямого импорта данных из постгреса или придется промежуточно выгружать данные на диск в tsv? -
емнип, в доке, где описаны тестовые наборы данных, есть справка как конвертить postgres дампы в KH
-
-
спасибо, доки смотрел, но не догадался посмотреть в тестовых наборах)
-
если речь про https://clickhouse.yandex/docs/ru/getting_started/example_datasets/nyc_taxi/#_1
то там перенос данных из pg в кх осуществляется через экспорт данных из pg в tsv на диск
при этом, правда, упомянуто что "Импорт данных напрямую из Postgres также возможен с использованием COPY ... TO PROGRAM." -
тут уж я пас, просто вспомнил момент из доки
-
но и это уже помогло, спасибо
буду читать про copy ... to program -
Ну я к тому что ребята все таки хттп веб клиент сделали и пилят пхп клиент, жаль было бы их не упомянуть , ну и плюс они одни из самых первых заявили о крутизне КХ после внедрения :)
-
А где можно почитать?
-
На тему?
-
Если веб клиент то это Tabix
-
-
Если пхп клиент то это php-clickhouse
-
А если о внедрении нужно найти видео выступление
-
Сейчас попробую найти
-
Да вот это
-
Как запустить ClickHouse своими силами и выиграть джекпот
https://habr.com/post/314558/Как запустить ClickHouse своими силами и выиграть джекпотМы решили описать простой и проверенный путь для тех, кто хочет внедрить аналитическую СУБД ClickHouse своими силами или просто испробовать ClickHouse на...
-
Вот
-
Видео пока не нашел (
-
Спасибо, это читал
-
-
-
-
-
https://clickhouse.yandex/docs/ru/query_language/select/#limit-n-by
если вам нужна последняя по времени запись со всеми столбцами целиком (GROUP BY не нужен, но нужно будет сортировать)
https://clickhouse.yandex/docs/ru/query_language/agg_functions/reference/#anylastx
если вам нужно обработать только *одно* поле (тогда нужно будет делать GROUP BY uniqID) -
Спасибо буду читать
-
Joined.
- 19 August 2018 (35 messages)
-
Привет! Никто не замечал, что начиная где-то с версии 18.10.3 CollapsingMergeTree начал схлопывать записи совершенно рандомно? На параллельном необновлённом сервере с 18.6.0 с такими же данными такого нет. Таблица CollapsingMergeTree (date1, (string2, int3, int4), 8192, int5sign) — такое впечатление, что стал склеивать просто по string2 игнорируя всё остальное на свете.
-
-
В 18.10.3 такое не меняли, поэтому нужно больше подробностей для разбирательств.
-
Проверил на одном из серверов, где версия 18.10.3 и CollapsingMergeTree с составным ключом - нет заметной разницы в количестве строк в сутки после выкладки.
-
У нас после обновления где-то в районе версии 1.1.54390 Кликхаус падать с сегфолтами типа
2018.08.14 03:50:29.451454 [ 223631 ] <Error> BaseDaemon: ########################################
2018.08.14 03:50:29.451482 [ 223631 ] <Error> BaseDaemon: (from thread 223630) Received signal Segmentation fault (11). где-то раз в несколько дней, поэтому начали обновлять всё время до последних версий с каждым релизом, чтобы посмотреть — может пропадёт сегфолт.
Баг с CollapsingMergeTree появился как раз в районе 13-го числа, когда вышла 18.10, затрагивает примерно 0.5% вставки. При вставки записи в составной ключ второй частью входит совершенно новый числовой id, но склеивается он почему-то с очень старыми записями (где понятное дело другой id).
Сейчас откатились на 18.6, смотрим. -
Пока чистили таблицы от этих кривых мёрджей (у нас можно заново данные получить из другой БД) методом INSERT INTO … SELECT * (битые из другой БД, нормальные так) — в логе появилась пара ошибок типа число строк со знаком “1” отличается больше чем на 1 от числа строк со знаком “-1”
-
-
Интересует стек трейс, который чуть ниже в логе.
-
2018.08.14 03:50:29.451454 [ 223631 ] <Error> BaseDaemon: ########################################
2018.08.14 03:50:29.451482 [ 223631 ] <Error> BaseDaemon: (from thread 223630) Received signal Segmentation fault (11).
2018.08.14 03:50:29.451488 [ 223631 ] <Error> BaseDaemon: Address: 0x50d8
2018.08.14 03:50:29.451492 [ 223631 ] <Error> BaseDaemon: Access: write.
2018.08.14 03:50:29.451498 [ 223631 ] <Error> BaseDaemon: Address not mapped to object.
2018.08.14 03:50:29.481747 [ 223631 ] <Error> BaseDaemon: 0. [0xbb070008]
2018.08.14 03:50:29.481783 [ 223631 ] <Error> BaseDaemon: 1. /usr/bin/clickhouse-server(DB::MemoryBlockInputStream::readImpl()+0x836) [0x4faa646]
2018.08.14 03:50:29.481795 [ 223631 ] <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.481805 [ 223631 ] <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::FilterBlockInputStream::readImpl()+0xa9) [0x51cfba9]
2018.08.14 03:50:29.481816 [ 223631 ] <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.481826 [ 223631 ] <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2e) [0x51cefde]
2018.08.14 03:50:29.481836 [ 223631 ] <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.481846 [ 223631 ] <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::PartialSortingBlockInputStream::readImpl()+0x2e) [0x520a7ce]
2018.08.14 03:50:29.481856 [ 223631 ] <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.481877 [ 223631 ] <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::l
oop(unsigned long)+0x125) [0x4e81bc5]
2018.08.14 03:50:29.481895 [ 223631 ] <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::
thread(MemoryTracker*, unsigned long)+0x219) [0x4e82479]
2018.08.14 03:50:29.481905 [ 223631 ] <Error> BaseDaemon: 11. /usr/bin/clickhouse-server() [0x938cc0f]
2018.08.14 03:50:29.481915 [ 223631 ] <Error> BaseDaemon: 12. /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f8cfe0d4494]
2018.08.14 03:50:29.481937 [ 223631 ] <Error> BaseDaemon: ########################################
2018.08.14 03:50:29.481946 [ 223631 ] <Error> BaseDaemon: (from thread 223632) Received signal Segmentation fault (11).
2018.08.14 03:50:29.481953 [ 223631 ] <Error> BaseDaemon: Address: 0x30730
2018.08.14 03:50:29.481967 [ 223631 ] <Error> BaseDaemon: Access: read.
2018.08.14 03:50:29.481974 [ 223631 ] <Error> BaseDaemon: Address not mapped to object.
2018.08.14 03:50:29.505355 [ 223631 ] <Error> BaseDaemon: 0. [0xa690b002]
2018.08.14 03:50:29.505364 [ 223631 ] <Error> BaseDaemon: 1. /usr/bin/clickhouse-server(DB::MemoryBlockInputStream::readImpl()+0x836) [0x4faa646]
2018.08.14 03:50:29.505370 [ 223631 ] <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.505376 [ 223631 ] <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::FilterBlockInputStream::readImpl()+0xa9) [0x51cfba9]
2018.08.14 03:50:29.505381 [ 223631 ] <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.505386 [ 223631 ] <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2e) [0x51cefde]
2018.08.14 03:50:29.505392 [ 223631 ] <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.505397 [ 223631 ] <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::PartialSortingBlockInputStream::readImpl()+0x2e) [0x520a7ce]
2018.08.14 03:50:29.505402 [ 223631 ] <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::IProfiling -
BlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.505410 [ 223631 ] <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::loop(unsigned long)+0x125) [0x4e81bc5]
2018.08.14 03:50:29.505418 [ 223631 ] <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::thread(MemoryTracker*, unsigned long)+0x219) [0x4e82479]
2018.08.14 03:50:29.505422 [ 223631 ] <Error> BaseDaemon: 11. /usr/bin/clickhouse-server() [0x938cc0f]
2018.08.14 03:50:29.505427 [ 223631 ] <Error> BaseDaemon: 12. /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f8cfe0d4494]
2018.08.14 03:50:29.505433 [ 223631 ] <Error> BaseDaemon: ########################################
2018.08.14 03:50:29.505439 [ 223631 ] <Error> BaseDaemon: (from thread 223633) Received signal Segmentation fault (11).
2018.08.14 03:50:29.505443 [ 223631 ] <Error> BaseDaemon: Address: 0x50d7
2018.08.14 03:50:29.505447 [ 223631 ] <Error> BaseDaemon: Access: write.
2018.08.14 03:50:29.505451 [ 223631 ] <Error> BaseDaemon: Address not mapped to object.
2018.08.14 03:50:29.528330 [ 223631 ] <Error> BaseDaemon: 0. [0x5210903f]
2018.08.14 03:50:29.528338 [ 223631 ] <Error> BaseDaemon: 1. /usr/bin/clickhouse-server(DB::MemoryBlockInputStream::readImpl()+0x836) [0x4faa646]
2018.08.14 03:50:29.528343 [ 223631 ] <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.528348 [ 223631 ] <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::FilterBlockInputStream::readImpl()+0xa9) [0x51cfba9]
2018.08.14 03:50:29.528353 [ 223631 ] <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.528358 [ 223631 ] <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2e) [0x51cefde]
2018.08.14 03:50:29.528364 [ 223631 ] <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.528369 [ 223631 ] <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::PartialSortingBlockInputStream::readImpl()+0x2e) [0x520a7ce]
2018.08.14 03:50:29.528374 [ 223631 ] <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.528386 [ 223631 ] <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::loop(unsigned long)+0x125) [0x4e81bc5]
2018.08.14 03:50:29.528396 [ 223631 ] <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::thread(MemoryTracker*, unsigned long)+0x219) [0x4e82479]
2018.08.14 03:50:29.528402 [ 223631 ] <Error> BaseDaemon: 11. /usr/bin/clickhouse-server() [0x938cc0f]
2018.08.14 03:50:29.528406 [ 223631 ] <Error> BaseDaemon: 12. /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f8cfe0d4494]
2018.08.14 03:50:29.528412 [ 223631 ] <Error> BaseDaemon: ########################################
2018.08.14 03:50:29.528418 [ 223631 ] <Error> BaseDaemon: (from thread 205) Received signal Segmentation fault (11).
2018.08.14 03:50:29.528422 [ 223631 ] <Error> BaseDaemon: Address: 0x1
2018.08.14 03:50:29.528426 [ 223631 ] <Error> BaseDaemon: Access: read.
2018.08.14 03:50:29.528430 [ 223631 ] <Error> BaseDaemon: Address not mapped to object.
2018.08.14 03:50:29.563819 [ 223631 ] <Error> BaseDaemon: 0. /usr/bin/clickhouse-server(tcmalloc::ThreadCache::ReleaseToCentralCache(tcmalloc::ThreadCache::FreeList*, unsigned long, int)+0x11b) [0x5a698eb]
2018.08.14 03:50:29.563827 [ 223631 ] <Error> BaseDaemon: 1. /usr/bin/clickhouse-server(tcmalloc::ThreadCache::ListTooLong(tcmalloc::ThreadCache::FreeList*, unsigned long)+0x1c) [0x5a6998c]
2018.08.14 03:50:29.563833 [ 223631 ] <Error> Ba -
seDaemon: 2. /usr/bin/clickhouse-server(tc_deletearray+0x369) [0x9406529]
2018.08.14 03:50:29.563838 [ 223631 ] <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::StorageMemory::drop()+0x1d1) [0x4fa6391]
2018.08.14 03:50:29.563850 [ 223631 ] <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::InterpreterDropQuery::executeToTable(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, DB::ASTDropQuery::Kind, bool, bool)+0x1102) [0x4e5ef02]
2018.08.14 03:50:29.563856 [ 223631 ] <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::InterpreterDropQuery::execute()+0x345) [0x4e61db5]
2018.08.14 03:50:29.563861 [ 223631 ] <Error> BaseDaemon: 6. /usr/bin/clickhouse-server() [0x4ef181b]
2018.08.14 03:50:29.563874 [ 223631 ] <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>)+0x116) [0x4ef29c6]
2018.08.14 03:50:29.563881 [ 223631 ] <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x3147) [0x2dd2a37]
2018.08.14 03:50:29.563887 [ 223631 ] <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x248) [0x2dd4b48]
2018.08.14 03:50:29.563893 [ 223631 ] <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x332) [0x58cce02]
2018.08.14 03:50:29.563898 [ 223631 ] <Error> BaseDaemon: 11. /usr/bin/clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x58c56af]
2018.08.14 03:50:29.563903 [ 223631 ] <Error> BaseDaemon: 12. /usr/bin/clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x16a) [0x58c5a8a]
2018.08.14 03:50:29.563909 [ 223631 ] <Error> BaseDaemon: 13. /usr/bin/clickhouse-server(Poco::PooledThread::run()+0x77) [0x5966e97]
2018.08.14 03:50:29.563915 [ 223631 ] <Error> BaseDaemon: 14. /usr/bin/clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x5962d58]
2018.08.14 03:50:29.563919 [ 223631 ] <Error> BaseDaemon: 15. /usr/bin/clickhouse-server() [0x938cc0f]
2018.08.14 03:50:29.563924 [ 223631 ] <Error> BaseDaemon: 16. /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f8cfe0d4494]
2018.08.14 03:50:29.563936 [ 223631 ] <Error> BaseDaemon: ########################################
2018.08.14 03:50:29.563942 [ 223631 ] <Error> BaseDaemon: (from thread 223634) Received signal Segmentation fault (11).
2018.08.14 03:50:29.563947 [ 223631 ] <Error> BaseDaemon: Address: 0x2db88f9
2018.08.14 03:50:29.563957 [ 223631 ] <Error> BaseDaemon: Access: write.
2018.08.14 03:50:29.563961 [ 223631 ] <Error> BaseDaemon: Attempted access has violated the permissions assigned to the memory area.
2018.08.14 03:50:29.563974 [ 223631 ] <Error> BaseDaemon: ########################################
2018.08.14 03:50:29.563978 [ 223631 ] <Error> BaseDaemon: (from thread 223635) Received signal Illegal instruction (4).
2018.08.14 03:50:29.563983 [ 223631 ] <Error> BaseDaemon: Illegal operand.
2018.08.14 03:50:29.586460 [ 223631 ] <Error> BaseDaemon: 0. [0x74511000]
2018.08.14 03:50:29.586468 [ 223631 ] <Error> BaseDaemon: 1. /usr/bin/clickhouse-server(DB::MemoryBlockInputStream::readImpl()+0x836) [0x4faa646]
2018.08.14 03:50:29.586473 [ 223631 ] <Error> BaseDaemon: 2. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.586478 [ 223631 ] <Error> BaseDaemon: 3. /usr/bin/clickhouse-server(DB::FilterBlockInputStream::readImpl()+0xa9) [0x51cfba9]
2018.08.14 03:50:29.586483 [ 223631 ] <Error> BaseDaemon: 4. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.586488 [ 223631 ] <Error> BaseDaemon: 5. /usr/bin/clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2e) [0x51cefde]
2018.08.14 03:50:2 -
9.586493 [ 223631 ] <Error> BaseDaemon: 6. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.586498 [ 223631 ] <Error> BaseDaemon: 7. /usr/bin/clickhouse-server(DB::PartialSortingBlockInputStream::readImpl()+0x2e) [0x520a7ce]
2018.08.14 03:50:29.586504 [ 223631 ] <Error> BaseDaemon: 8. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x25a) [0x4768cfa]
2018.08.14 03:50:29.586511 [ 223631 ] <Error> BaseDaemon: 9. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::loop(unsigned long)+0x125) [0x4e81bc5]
2018.08.14 03:50:29.586519 [ 223631 ] <Error> BaseDaemon: 10. /usr/bin/clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::thread(MemoryTracker*, unsigned long)+0x219) [0x4e82479]
2018.08.14 03:50:29.586523 [ 223631 ] <Error> BaseDaemon: 11. /usr/bin/clickhouse-server() [0x938cc0f]
2018.08.14 03:50:29.586528 [ 223631 ] <Error> BaseDaemon: 12. /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7f8cfe0d4494] -
-
-
По стек трейсу на первый взгляд непонятно, в чём проблема. Надо обсудить в личке, как отладить.
-
Добрый день, подскажите пожалуйста как оптимальнее вывести nested со структурой name/ value?? Чтобы в выводе был формат 1,1,1,1,1,[aaa:bbb,ccc:ddd], где aaa name bbb value
-
1,1,1,1,1 это значения из родительской таблицы
-
Ccc - name, ddd - value
-
нашел видео сегодня: https://www.youtube.com/watch?v=tf38TPvwjJ4&t=5sАлександр Зайцев — Переезжаем на Yandex ClickHouse
Подробнее о докладе: http://www.highload.ru/2016/abstracts/2297.html Подписаться на канал: https://goo.gl/EjIehg Сайт: https://habrahabr.ru Социальные сети: ...
-
Да, нужно использовать функцию argMax вместе с group by. Функцию anyLast использовать не советую, порядок строк в группах может быть недетерминированным.
-
Всем привет.
Ищу разработчика, который сможет реализовать и запулить(и что бы приняли) функцию аналогичную функции lag в oracle.
Мы когда-то делали на основе RunningDifferent, но не получилось реализовать для string, там как-то сложно получалось. -
Это можно сделать при помощи функции arrayMap.
-
-
Да, можно. И where и prewhere.
-
Сделать можно и при помощи JOIN.
Вопрос перфоманса и потребления оперативки.
На табличке в несколько ТБ, arraymap\join заканчивается OOM. -
Добрый вечер. Если честно так и не понял для чего нужен chproxy https://github.com/Vertamedia/chproxy
Размазывает нагрузку на несколько нод кластера но все-равно через disturbed таблицу?GitHub - Vertamedia/chproxy: ClickHouse http proxy and load balancerClickHouse http proxy and load balancer. Contribute to Vertamedia/chproxy development by creating an account on GitHub.
-
Добрый! Мы постарались описать основные преимущества использования здесь - https://github.com/Vertamedia/chproxy#chproxyGitHub - 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.
-
А так можно?
-
Попробую кратко описать юзкейсы:
- равномерно распределять вставки по шардам кластера без использования дистрибьютед таблицы. chproxy каждый раз выбирает следующий наименее загруженный "живой" шард (least-loaded + round-robin)
- равномерно распределять нагрузки при чтении из кластера
- кешировать ответы от КХ (отлично подходит для систем визуализации вроде Grafana)
- лимитировать доступ к кластеру по пользователям или адресам
- контролировать кол-во одновременно выполняющихся запросов и максимальное время их выполнения
- избежать перегрузки кластера при аномальном повышении кол-ва запросов путем выстроения их в очередь
- автоматическая выписка https сертификатов -
В смысле?
Я ищу разработчика за деньги, конечно же. Который сможет реализовать и довести задачу до пул реквеста. По деньгам не обижу. :) -
Спасибо
-
в чем фишка не использовать дистрибьютед таблицы ?
-
с помощью них вы сможете одним запросом получить данные со всех шардов
-
это я понимаю, но почему chproxy избегает их использование для вставки данных?
-
Так рекомендуется делать при больших объемах данных, чтобы избежать перегрузки ноды, на которой производится вставка. Т.е. вы можете так делать, но писать данные на конкретный шард - более оптимально
- 20 August 2018 (210 messages)
-
Если об этом написано где-нибудь в таком месте, на которое можно сослаться из википедии (чат не подходит), то можно добавить :)
-
Добавил.
-
Кто-то сталкивался с тем, что INSERT ... SELECT
прочитывает примерно 30-40% исходной таблицы и вставляет около того, не выводя ошибок ? -
Может быть какие-то лимиты срабатывают? Проверьте SELECT * FROM system.settings WHERE changed = 1
-
Да, есть измененные:
│ max_query_size │ 10485760 │ 1 │
│ use_uncompressed_cache │ 0 │ 1 │
│ background_pool_size │ 50 │ 1 │ │
│ background_schedule_pool_size │ 24 │ 1 │ │
│ load_balancing │ random │ 1 │ │
│ max_rows_to_read │ 600000000000 │ 1 │ │
│ max_execution_time │ 60 │ 1 │ │
│ timeout_overflow_mode │ break │ 1 │ │
│ max_ast_elements │ 1000000 │ 1 │ │
│ max_memory_usage │ 40000000000 │ 1 │ -
что может ограничивать? max_query_size ?
-
Думаю что timeout_overflow_mode + max_execution_time
-
за минуту не успевает. И вместо throw ("брось исключение") включено break ("прерви без сообщения об ошибке")
-
Ну или может быть max_rows_to_read
-
Но тогда бы было исключение
-
Ок, отключил бряк, поднял лимиты.
-
Спасибо огромное. Помогло.
-
Я уточню, может где и напишут ;)
-
Joined.
-
А это вам не подходит? https://stackoverflow.com/a/51873915/1555175Clickhouse running diff with grouping
General Task A table consists of three columns (time, key, value). The task is to calculate a running difference for each key. So, from input --------------- | time | key | value | --------------...
-
Скоро там появится и решение, к которому я в итоге пришел.
Вроде оно, да -
... в одном из видео, слышал что для КХ нужно минимум 10Г оперативки
как задать минимальный лимит? в доках не нашел -
max_memory_usage
-
можно поточнее пожалуйста, в какой конфиг вписывается, или ссылку ?
-
users.xml
https://clickhouse.yandex/docs/en/operations/settings/query_complexity/#max_memory_usage_for_all_queriesRestrictions on Query Complexity | ClickHouse DocumentationRestrictions on Query Complexity Restrictions on query complexity are part of the settings. They are used to provide saf
-
спасибо
-
Joined.
-
Вроде не строгое правило. Зависит от запросов, например. Я и на восьми поднимал, норм работало, пока тяжёлые SELECT'ы не подсунул, там начало кушать.
-
на четырёх норм может работать, всё зависит от задач, которые требуется решать, и объёмов данных, на которых нужно работать.
-
На 8GB работает с декабря, все норм.
-
Всем привет! Как можно сгруппировать по хешу значения из таблицы, при этом оставив названия полей текущими? Например:
SELECT
client_id,
any(category_id) as category_id,
cityHash64(category_id) as category_id_hash,
count() as cnt
FROM db.table
GROUP BY (client_id, category_id_hash);
пишет что DB::Exception: Unknown identifier: any(category_id)
и хотелось бы на выходе получить именно название category_id: (если изменить его, то все отрабатывает, к примеру: any(category_id) as _category_id) -
Там скорее всего имелось ввиду, что в настройках по умолчанию стоит лимит в 10 гигов памяти. Я лично стенды поднимал на серверах с 2 гигами оперативы и все замечательно работало.
-
Промахнулся :) ответ выше ^^
-
с оперативкой разобрался, там написано, в доках написано что это максимальный вариант
но в видео, почему-то было озвучено, что это минимальный лимит -
Привет, не подскажете, как можно посмотреть запрос, использованный для создания таблицы?
-
show create table table_name
-
спасибо
-
Привет,
Чтобы забирать данные из постгреса в КХ, обязательно ли настраивать конфигурации словаря и odbc.ini (как описано в https://clickhouse.yandex/docs/ru/query_language/dicts/external_dicts_dict_sources/#postgresql) или можно обойтись передачей всех параметров в connection string типа select * from odbc('UID=username;PWD=password;HOST=127.0.0.1;PORT=5432;DATABASE=my_db', 'table_name') ? -
-
спасибо
-
всем привет
имеется две таблицы размеров 38.25 GiB и 33.06 GiB
вопрос сколько нужноопертивной памяти чтобы выполнить join по ним скажем по ID_user ?
сейчас селект отказывается выполнятся ссылаясь на ограничение озу в 30 гигов -
Если их полностью переджойнить, то думаю, что как минимум 60гиг. А размер в сжатом виде?
-
это размер уже в сжатом виде
-
-
Тогда боюсь, что больше 60 гиг )
-
Кстати да
-
Про колонки забыл совсем
-
нужен не full outer join а просто inner join
-
-
ну это размер таблиц , который показывает селект
--Размер таблиц
SELECT table,
formatReadableSize(sum(bytes)) as size,
min(min_date) as min_date,
max(max_date) as max_date
FROM system.parts
WHERE active
GROUP BY table -
т.е в таблицах больше 30 млдр записей, а если делать join то около 50 млн
-
КХ должен материализовать левую часть джоина в памяти, вот в это очень легко воткнуться и пока не будет мерж-джоина эта проблема будет.
-
только левую?
-
Правую, я руки перепутал )
-
если в правой части будет вложенный селект который из таблицы выбирает только нужные нам по like значения и уже потом будет соединяет их с другой таблицей разница будет или нет? он всё равно должен будет материализовать всю праую таблицу целиком?
-
Нет, он материализует результат выполнения запроса, на его размер можно влиять, но он независим от левой части что там напишете то и будет.
-
-
-
Бекапить каждый шард )
-
-
А они и так никак к друг другу не относятся
-
-
-
-
-
Добрый день. Я хочу странного: хочу использовать SummingMergeTree и при этом чтобы у меня оставались записи, в которых все суммируемые поля по нулям. Чтобы для историии: вот пришла метрика. вот были везде нулии. А не так, что нет метрики - и бог его знает: то ли были нули, то ли не пришла метркиа.
Думаю, можно добавить какое-нибудь еще поле OloloCounter и ставить его в еденичку всегда. Нолики дже не много места будут занимать на диске в пожатом виде, да? -
или будут много занимать? Или чо им там вообще щанимать место-то на диске
-
а может есть просто опция у движка?
-
select count(distinctuser_id) from all_data
таблица весит 35 гигов
обьем озу 60 гигов но для КХ дали 30
селект вываливается с ошибкой Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 28.03 GiB (attempt to allocate chunk of 2147483648 bytes), maximum: 27.94 GiB, e.what() = DB::Exception
как это обойти? -
а если таблица до 300 гигов разрастется?
-
фильтровать, либо увеличивать доступный объем памяти
-
а распределённость может здесь помочь?
-
только для скорости фильтрации
-
а как нибудь можно посмотреть размер гб колонки?
-
-
-
установить max_bytes_before_external_sort, max_bytes_before_external_group_by ы 10ГБ?
-
Всем привет. Подзапросы в мат.вьюхах разрешены? Ругается при вставке в table, что нет поля time_slot
AS SELECT date, time_slot, _string_field as string_field, string_field_hash, events FROM (SELECT date, timeSlot(event_time) as time_slot, any(string_field) as _string_field, cityHash64(string_field) as string_field_hash, count() as events FROM table group by date,time_slot, string_field_hash) -
-
ну есть у меня таблица на 100gb, и памяти есть на одном сервере 50 и на втором 50. Могу я посчитать тогда строки в таблице, верно?
-
что значит "посчитать ... строки"? count - нет проблем :)
-
у него там distinct по не ключевому полю
-
вот такие проблемы бывают, их же вроде обсуждаем
-
странности какие то
select count(distinct user_id) from all_data - выдает ошибку
а вот select count(*) from all_data - отрабатывается как так то? -
ну, я имел в виду в тех условиях, да
-
тут все логично, если знать приниципы работы БД
-
distinct user_id - есть uniq sort, поэтому много памяти кушает
-
-
-
так всё дело в том, что сам запрос отрабатывает ок. но если его засунуть в мат.вьюху, то при вставке в логи сыпятся ошибки.
-
попробуй в group by таки вставить toTimeLapse(....) вдруг прокатит?
-
вышли show create table all_data?
-
чтобы этого избежать можно сделать ли два поля ключевыми?
ENGINE = MergeTree PARTITION BY date order by (user_id,parner_user_id); -
-
system.columns data_compressed_bytes data_uncompressed_bytes
system.parts_columns по партам -
ответ надо искать в архитектуре приложения, я не знаю, если честно. а что у Вас там первичный ключ?
вероятно, Вам стоить сделать ключом какой-то там таймстамп, и считать за периоды, чтобы КХ не удивлялся. -
-
с технической точки так можно? и соотвесвенно по нему count будет шустрее ходить?
-
-
да я это понял
-
-
ну таблица маппинг по сути
-
хранит юзеров одной базы и другой, т.е. обьеденяет