- 18 August 2021 (152 messages)
-
а просто селект работает?
SELECT * FROM postgresql() -
работает
-
Обсудили лично, если кратко, то да, нельзя указывать один и тот же набор хостов как дефолтный и для отдельных таблиц. То есть, дефолтный он и есть дефолтный, и указание точно такого же роутинга для отдельных таблиц kittenhouse считает как ошибку конфигурации, потому что эта строка получается по сути лишняя
-
Добры день, ищу возможность хранить произвольный массив (привет, PHP, это хэшмап) произвольной размерности в поле. Map не подходит, Array не подходит, есть ли стандартная возмодность?
-
Хранить как строку в формате JSON и использовать функции для работы с JSON для обращения к ним разве что?
-
(тип колонки получается тогда String)
-
Вполне подойдёт, мне даже работать с данными не надо, считай, что лог в поле
-
значит в постгресе у вас лежит null в колонке phone, а в КХ у вас тип String, который не позволяет вставить null. Можно к пустой строке приводить телефон если позволяет бизнес логика или поменять тип колонки phone в КХ на Nullable(String)
-
Nullable(String) тогда лучше
-
с точки зрения производительности это будет хуже
-
ClickHouse/ClickHouse tagged: v21.8.4.51-lts
Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v21.8.4.51-lts
Release notes:
v21.8.4.51-ltsRelease v21.8.4.51-lts · ClickHouse/ClickHouseClickHouse lts release v21.8.4.51-lts
-
Добрый день, коллеги! Нид хэлп! Заапдейтился до 21.8, пытаюсь создать реплику Постгреса. При создании ругается DB::Exception: MaterializedPostgreSQL is an experimental database engine. Enable allow_experimental_database_postgresql_replica to use it. (version 21.8.3.44 (official build)), а если засунуть ключик в users.xml на старте ругается, что не знает такого ключа. Проверил - ключ в xml введен правильно, без ошибок...
-
ClickHouse/ClickHouse tagged: v21.7.8.58-stable
Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v21.7.8.58-stable
Release notes:
v21.7.8.58-stableRelease v21.7.8.58-stable · ClickHouse/ClickHouseClickHouse stable release v21.7.8.58-stable
-
там опечатка в имени настройки в ошибке, надо выставить allow_experimental_database_materialized_postgresql
-
ClickHouse/users.xml at 8351f1db9923100e411c380a8ba3fa52b5dff4d3 · ClickHouse/ClickHouse
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
благодарю, уже поиском по чату и по коду нашел! В эксепшне надо бы поправить....
-
Всем привет.
Пытаюсь записать данные из кафки, но в логах така вот ошибка:
2021.08.18 12:43:57.292385 [ 53451 ] {} <Error> void DB::StorageKafka::threadFunc(size_t): Code: 434, e.displayText() = DB::Exception: Cannot parse './flow.proto' file, found an error at line -1, column 0, Backslashes, consecutive slashes, ".", or ".." are not allowed in the virtual path, Stack trace (when copying this message, always include the lines below): -
Это если что goflow -> kafka -> clickhouse
-
Ты схему клал в format_schemas? Попробуй в конфиге убрать ./.
-
да
без . пробовал, получаю такое:
2021.08.18 12:55:49.898125 [ 53445 ] {} <Error> void DB::StorageKafka::threadFunc(size_t): Code: 444, e.displayText() = DB::Exception: Protobuf messages are corrupted or don't match the provided schema. Please note that Protobuf stream is length-delimited: every message is prefixed by its length in varint.: while parsing Kafka message (topic: flows, partition: 0, offset: 0)', Stack trace (when copying this message, always include the lines below): -
Всем привет. Хочу использовать ReplacingMergeTree с дополнительным параметром ver. Только мне нужно, чтобы, чем меньше был ver, то его и оставлял движок, а остальное в утиль. Есть идеи как сделать?
-
сделать ver * -1
-
-
возможно вычисляемую
-
Всем привет. Подскажите пожалуйста, как узнать сколько занимает индекс в RAM? Я правильно понимаю если гранулярность 8192, то это количество = (кол-во строк / 8192) * сумма размеров колонок в индексе?
-
AFAIR вместо суммы колонок= размер колонки сортировки + пара 64 битных размеров указателей(типа начало сжатого куска + размер внутри разжатого) для каждой колонки.
Тип колонок остальных на размер вроде не влияет -
есть вопрос, для словарей определенных в файле как обратиться к их именам, в какое пространство они попадают? <yandex>
<dictionary>
<name>ext-dict</name>
<source>
<file>
<path>/etc/clickhouse-server/dict_clickhouse.csv</path>
<format>CSV</format>
</file>
</source>
<layout>
<flat />
</layout>
<structure>
<id>
<name>value_dict</name>
<type>String</type>
</id>
<attribute>
<name>key_dict</name>
<type>String</type>
<null_value></null_value>
</attribute>
</structure>
<lifetime>0</lifetime>
</dictionary>
</yandex>
так определен словарь, SELECT dictGet('ext-dict', value_dict, key_dict) as value_dict, key_dict
:-] FROM system.dictionaries limit 20; не работает, есть какая-то возможность проверить куда создался словарь? -
обычно xml словари попадают в корень, проверьте в select * from system.dictionaries, возможно он не загрузился
-
они так и должны работать, без всякого префикса. ошибка какая?
-
Code: 47. DB::Exception: Received from localhost:9000. DB::Exception: Missing columns: 'value_dict' 'key_dict' while processing query: 'SELECT dictGet('ext-dict', value_dict, key_dict) AS value_dict, key_dict FROM system.dictionaries LIMIT 20', required columns: 'key_dict' 'value_dict'.
-
у вас там колонки как аргументы dictGet, это правда то что хотите?
-
да
-
обычно вторым аргументом строка передаётся
-
в систем директори пусто
-
словарь не создался
-
-
Здравствуйте.
Буду очень благодарен за помощь.
Есть выборка:
date | version | count -
-
Количество версий для каждой даты одинакова, но заранее неизвестно сколько и какие версии будут.
Каким образом выдать результат в следующем виде: date | version_1 | version_2 | ... -
-
не загрузился словарь, есть какие-то методы отладки?
-
SELECT *
FROM system.dictionaries
Query id: a75d8e0f-5770-4793-b686-5332d3f71f06
Ok.
0 rows in set. Elapsed: 0.005 se -
Спасибо. Создал дополнительное поле
position_ver MATERIALIZED position*-1,
+ ReplacingMergeTree(position_ver)
и все заработало, как надо -
SYSTEM RELOAD DICTIONARY делали после добавления? Почему не через SQL создаеёте словарь? так проще будет управлять ими
-
нет, спасибо за подсказку
-
Приветствую, подскажите пожалуйста куда копать?
запрос к дистрибутивному представлению упирается в память
select * from (SELECT max(order.current_dt) as current_dt,
order_guid,
argMax(broker, order.current_dt) as broker,
argMax(account_guid, order.current_dt) as account_guid,
argMax(contract_symbol, order.current_dt) as contract_symbol,
argMax(order_type, order.current_dt) as order_type,
argMax(price, order.current_dt) as price,
argMax(side, order.current_dt) as side,
argMax(quantity, order.current_dt) as quantity,
argMax(exec_inst, order.current_dt) as exec_inst,
argMax(time_in_force, order.current_dt) as time_in_force,
argMax(expire_dt, order.current_dt) as expire_dt,
argMax(filled_quantity, order.current_dt) as filled_quantity,
argMax(status, order.current_dt) as status,
argMax(status_description, order.current_dt) as status_description,
argMax(created_dt, order.current_dt) as created_dt,
argMax(is_opened, order.current_dt) as is_opened,
argMax(is_fixed, order.current_dt) as is_fixed,
argMax(central_time, order.current_dt) as central_time
FROM order_state as order
GROUP BY order_guid)
WHERE status in ('ORDERSTATUS_NEW','ORDERSTATUS_PARTIAL')
and contract_symbol = 'BTCUSDZZ';
представление живет в двух шардах в каждом из которых две реплики -
а если внутренний запрос переписать на limit 1 by order_guid ?
-
вы из binance? =))
-
-
-
дату?
-
Для начала нужно отменить старое состояние, для этого нужно "помнить" версию для отмены, а приложение ничего не сохраняет, в том числе дату
-
Это да
-
поправил
-
нет
-
а поч так много argMax? пихните все поля в кортеж
-
-
я бы попробовал, но вдруг поможет
-
-
так результат другой будет
-
-
-
а как-то можно сделать чтобы PRIMARY KEY был строкой для словаря?
-
просто я определила словарь через запрос и получилось что primiry key переопределился на ['key_value'] │ ['UInt64']
-
Подскажите как по дате получить день недели?
-
Функции для работы с датами и временем | Документация ClickHouse
Функции для работы с датами и временем Поддержка часовых поясов Все функции по работе с датой и временем, для которых эт
-
Спасибо
-
DateTIme долго INSERTится/SELECTится из-за таймзон в питоне. Они медленные. В доке вот что написано: https://clickhouse-driver.readthedocs.io/en/latest/types.html#datetime-timezone-datetime64-timezone
Integers are interpreted as seconds without timezone (UNIX timestamps). Integers can be used when insertion of datetime column is a bottleneck. -
ClickHouse поддерживает следующие виды ключей:
Числовой ключ. UInt64. Описывается в теге <id> или ключевым словом PRIMARY KEY.
Составной ключ. Набор значений разного типа
https://clickhouse.tech/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure/Ключ и поля словаря | Документация ClickHouseКлюч и поля словаря Секция <structure> описывает ключ словаря и поля, доступные для запросов. Описание в формате XML: <d
-
- как тут уже писали, попробуйте выкинуть эти argMax/group by, заменив их на order by current_dt desc limit 1 by order_guid Похоже у limit 1 by какие-то иные оптимизации при выборе баланса скорость/память
- или укажите явно - max_bytes_before_external_group_by='40G' & max_threads=1
- если у записей есть уникальный ID, и логика запроса позволяет, то вычислите эти ID подзапросом с опорой на status, и только потом читайте все остальные столбцы с условием id in IDs - так вы сможете правильно перенести условие до group by
- and last but not least - прочитайте про having. То что вы хотели сказать подзапросом обычно пишут при помощи having. Скорости/памяти это скорее всего сейчас не прибавит, но выглядеть будет приличнее, и есть шанс что оптимизатор запросов где-то когда-то этим сможет воспользоваться. -
условие WHERE нужно перенести в подзапрос иначе вы сначала всю базу достаёте и группируете, а потом уже фильтруете. но до фильтрации уже не доходит, потому что всё падает ещё на стадии группировки всей базы
-
просто так его не перенесешь, но копать несомненно надо именно в эту сторону.
-
Почему Nullable(Int32) данные в null записывает, когда в основной таблице PG значение 225.0?
-
если таблица отсротирована по order_guid, можно включить использование primary key для group by , память не будет использоваться
-
какой тип в PG и какой в CH ?
-
PG - integer
CH - Nullable(Int32) -
-
да, по не му и отсортирована, а как вкл использование pk для group by
-
--optimize_aggregation_in_order arg Enable GROUP BY optimization for aggregating data in corresponding order in MergeTree tables.
-
реализовано давно, УМВР
-
-
а почему decimal тогда ? 225.0 ?
-
Есть null в PG у этой таблице
-
About access restricting to system database . It's kinda cumbersome. · Issue #24887 · ClickHouse/ClickHouse
create user foo identified by '123'; revoke all on *.* from foo; create role RO; CREATE ROW POLICY ro_query_log_filter ON system.query_log USING 1 AS RESTRICTIVE TO RO; CREATE ROW P...
-
какой null ? я про .0 спросил? почему 225.0
-
-
благодарю
-
В pg Admin так отображается. В dll integer
-
нет.
Советую скалдывать в ENGINE=Log таблицу с рандомным именем.
но есть проблема потом надо кверять тот же самый сервер -
Благодарю. На уровне приложения придумывать.
-
-
-
что выдает
SELECT
x,
sum(x) OVER ( ORDER BY x ASC)
FROM
(
SELECT arrayJoin(range(10)) AS x
) -
я сервере приложений в CSV сохраняю, потом можно прыгать, limit offset
-
Вы имеете ввиду движок file?
-
я имею ввиду это решено вне КХ
-
-
select version();
-
-
-
-
это dbgrip синстаксис не понимает, до КХ не доходит запрос
-
Ага, 20.3
-
с 21.3 появилось
-
Привет. Я использую кликхаус через clickhouse-bulk, запись данных черех пхп клиент ClickHouseDB.
При подключении с опцией
'auth_method' => \ClickHouseDB\Transport\Http::AUTH_METHOD_QUERY_STRING,
все работает нормально, но если ставлю опцию
'auth_method' => \ClickHouseDB\Transport\Http::AUTH_METHOD_HEADER,
то авторизация не проходит, остальные параметры не меняю.
Подскажите нужны какие-то доп настройки для авторизации через хедеры в запросе? -
-
а версия КХ ?
в современных КХ 21.7 21.8 работает -
Понял, спасибо )
-
Последняя
-
есть еще один вопрос, как выполнить селект только если if отработал корректно, есть какой-то пример?
-
-
groupArray
-
благодарю
-
version 21.8.3 revision 54449.
Без Nullable не работает -
всем привет! правильно ли я понимаю, что любая агрегатная функция, если встречается несколько раз в запросе, будет вычислена только один раз? например
SELECT sum(a) AS r1, sum(a) AS r2
или более сложное, типа
SELECT quantilesTDigestMerge(0.99, 0.999)(a)[1] AS r1, quantilesTDigestMerge(0.99, 0.999)(a)[2] AS r2
? -
так это же легко проверить - select sum(number) as n1, sum(number) as n2 from numbers(10000000) - и смотрите на время. У меня видно, что разницы с одним и двумя нет.
Но все равно стоит написать красивее:
with quantilesTDigestMerge(0.99, 0.999)(a) as digest
select digest[1] as r1, digest[2] as r2 from ..... -
Привет всем. Такой вопрос: а есть ли какой-то хороший солюшен для алертинга по данным в КХ? Думаем логи перенести из эластика в КХ но пока вот эта фича останавливает
-
В ес смотрите через anomaly detection?
-
Не только, opendistro for elastic или последний opensearch позволяют алертить по разным параметрам. В том числе и по anomaly detection
-
понял. в своё время искали в кх, оптимальной идей оказалось отводить общий трафик через матвью в сторонние таблицы ( в том числе и аггрегационные) по определенным параметрам и опрос с определенным интервалом. для нашего потока 30+ккк евентов в день, оказалось оптимальным. Если данных меньше, возможно можно и напрямую в основные таблицы запрашивать. Готового решения, как такового, не оказалось.
-
наверное можно сделать таблицу с Engine = URL и инсертить туда через MV по каким-то условиям. На сервер придет POST запрос, который можно как-то отработать.
-
Ок. Спасибо. Будем думать/искать дальше
-
спасибо! "красиво" не делаю, потому что гошная библиотека ругается, что массив digest не вычитывается
-
да, любое выражение, не только агрегатная функция
даже rand() и sleep() -
даже аналога кибаны нет кажется, нечем смотреть
только cLoki -
алиасы можно пихать в любое место
select ( quantilesTDigestMerge(0.99, 0.999)(a) as digest )[1] as r1, digest[2] as r2 from ..... -
спасибо, попробую
-
Коллеги, добрый вечер!
-
Аз есмь чайник, прошу помощи. Поставил clickhouse на ЦентОС 7.5. Что и как поправить в конфиге, что бы можно было curl обратиться к серверу, где он стоит по http. Через localhost:8123 получается, с другой машины - нет. Машины друг друга видят, другие сервисы запускаются.
-
вам надо поправить вот эту настройку
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#server_configuration_parameters-listen_hostServer Settings | ClickHouse DocumentationServer Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli
- 19 August 2021 (274 messages)
-
доброго времени суток. возникло несколько вопросов:
1) при попытке удаленно стянуть данны через clickhouse-backup на удаленном сервере сохранились только метаданные, а shadow не приехали - это так и должно быть? можно ли удаленно бекапить сервер
2) на боевом сервере папка shadow не пуста (я так понимаю ее создал удаленный запрос описанный выше). можно ли ее очистить, и не повредит ли это работе сервера (везде пишут, что эти данные можно не хранить, но я с этой базой работаю 1й раз)
3) тупое копирование данных на удаленный сервер поставило в тупик du -ha показало 300 гб, при копировании с ext4 на ext4 через cp-r оно заняло более 350гб и не влезло.. это нормально, или ошибка где-то?
спасибо -
в shadow создаются хардлинки. Они места не занимают.
1) не надо так делать. Надо локально запустить clickhouse-backup и научить его аплоадить куда надо, он умеет.
2) можно удалять, это хардлинки
3) это нормально, но du -sh shadow должен показать настоящий размер, du sh * в каталоге КХ не настоящий. -
При перегоне колонки местами поменялись почему. Явно указал в select и все пошло
-
Добрый день.
Сегодня с сервером КХ какие-то чудеса.
Коннект начал пропадать время от времени.
Перезагрузил убунту, теперь даже со сброшенным
в user.xml паролем ( <password></password> )
не входит. Что это может быть, как победить ? -
sudo service clickhouse-server restart
не помогает -
connection refused это обычно ответ операционки. фаервола линксового, когда никто не слушает порт
-
... кажется нашел. ssd отвалился (
-
-
Диск примонтировали, всё ОК. Но даже клиент КХ не пускал (
-
День добрый. А подскажите, пожалуйста, есть ли готовое решение при бэкапе методом фриза партиций. Проверить, что в этот момент не идет вставка в партицию? Проверять processlist на предмет Insert и system.replication_queue'?
-
rm -rfv /var/log/clickhouse-server/*
systemctl restart clickhouse-server
less /var/log/clickhouse-server/*.err.log -
а зачем вам проверять что идет вставка в партицию?
freeze создает hardlink только на вставленные парты в партиции
на момент старта freeze
все что попадет позже просто не войдет в бекап...
чего именно вы хотите добиться такой проверкой? -
у нас есть большая таблица Insert Only с партами по неделе и раз в неделю хочется ее бэкапить и быть уверенным, что бэкап будет консистентным и не делался в момент, когда эту партицию перенаполняли из источника или был большой лаг на реплике или другие непредвиденные сценарии.
-
Вы не можете перенаполнять эту партицию в другую таблицу и потом просто делать ALTER TABLE REPLACE PARTITION ?
-
в таком случае не нужно бэкапить текущую исходную таблицу. А в скрипте хочется все предусмотреть и если партиция "занята", то отложить выполнение, например, на сутки
-
по вашему сообщению не очень понятно
вы различаете парты и партиции?
чтобы избежать большого лага по реплике, в clickhouse-backup делается для Replicated таблиц SYSTEM SYNC REPLICA
с настраиваемым timeout
ну и вы никак не можете избежать ситуации когда в эту эту таблицу будет вставка после начала FREEZE ...
поэтому непонятно все таки чего именно вы пытаетесь избежать
понятие "консистентности" в clickhouse eventually (консистеность при отсутвии вставок когда нибудь будет достигнута)
транзакций нет... только "атомарные" вставки и "аторманые" мержи в бекграунде... -
Добрый день.
Подскажите есть ли что то похожее на хранимые процедуры в клике?
может какой то аналог?
хотелось бы иметь функцию обработки данных и дергать ее из запросов чтобы не писать вручную каждый раз -
Добрый день!
Подскажите в чем может быть причина?
ServerErrorHandler: Code: 210, e.displayText() = DB::NetException: Connection reset by peer, while reading from socket (:37770), Stack trace (when copying this message, always include the lines below):
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x8f9557a in /usr/bin/clickhouse
1. DB::ReadBufferFromPocoSocket::nextImpl() @ 0x10063e1e in /usr/bin/clickhouse
2. DB::TCPHandler::runImpl() @ 0x10fcd104 in /usr/bin/clickhouse
3. DB::TCPHandler::run() @ 0x10fe06d9 in /usr/bin/clickhouse
4. Poco::Net::TCPServerConnection::start() @ 0x13b5730f in /usr/bin/clickhouse
5. Poco::Net::TCPServerDispatcher::run() @ 0x13b58d9a in /usr/bin/clickhouse
6. Poco::PooledThread::run() @ 0x13c8bc19 in /usr/bin/clickhouse
7. Poco::ThreadImpl::runnableEntry(void*) @ 0x13c87eaa in /usr/bin/clickhouse
8. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
9. clone @ 0xfe9fd in /usr/lib64/libc-2.17.so
(version 21.8.4.51 (official build))
Увеличил значение
connect_timeout_with_failover_ms>1000</connect_timeout_with_failover_ms
Но проблема осталась -
Прям процедур нет, но что-то похожее можно сделать через словарь с источником executable/executable_pool.
https://clickhouse.tech/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-executableИсточники внешних словарей | Документация ClickHouseИсточники внешних словарей Внешний словарь можно подключить из множества источников. Общий вид XML-конфигурации: <yandex
-
Спасибо, посмотрю
-
кто-то открывает TCP соединение и 9000 порт
и обрывает его не послав запрос
у вас никаких проб нету в мониторинге? -
Ребят, использую ReplacingMergeTree для удаления дублирующих записей, запрос OPTIMIZE TABLE верно их чистит. Но запрос по ID сам по себе не возвращает последнюю запись. Правильно ли, что мне всегда нужно указывать сортировку по полю версии и LIMIT 1? Или каждый раз дополнять FINAL?
-
Всмысле проб?
-
А как вы проверили что optimize table верно почистил данные?
-
Вот у меня на 9000 порту
lsof -i :9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
clickhous 730 clickhouse 174u IPv4 11378742 0t0 TCP chn11:cslistener (LISTEN)
clickhous 730 clickhouse 181u IPv4 11391383 0t0 TCP chn11:cslistener->chr1:37826 (ESTABLISHED) -
Выполнил его руками для таблицы, глазами проверил
-
ну вы же какой-то запрос сделали чтобы глаза увидели)
-
Через плагин IDE посмотрел все элементы, я же не буду перед каждым запросом optimize выполнять
-
Я не смог из документации понять: в движке ReplacingMergeTree, пока записи не удалились сами в фоне, я сам должен выбирать последнюю актуальную запись или он как-то может это сделать?
-
-
надо всегда убирать дубликаты
-
-
Спасибо, стало ясно, что я должен это делать
-
А кто-то может подсказать по этой проблеме?
-
-
А что это значит?
-
-
Можно использовать функцию transform, в одном массиве указать список ид, во втором циферку очерёдности
-
-
всем привет, скажите, это бага или фича?
делаю выборку по 5000 первичных ключей в цикле (всего 100к ключей) по таблице с 10млн записей, не находит около 4к записей
сокращаю выборку до 500 за раз, уже не находит только 300+ ключей
сокращаю выборку до 50 за раз, в этот раз не нашел только 12 ключей
проверяю по одному каждый ключ, все есть в базе -
нет, пробы это имеется ввиду мониторинг какой то внешний который мониторит что 9000й порт открыт
-
Та нет ничего такого.
-
или ещё проще:
WITH [5, 8, 3, 6] AS ids
SELECT number
FROM
(
SELECT number
FROM system.numbers
LIMIT 10
)
WHERE number IN (ids)
ORDER BY indexOf(ids, number) ASC
5
8
3
6 -
А вот это мне кажется круто. Спасибо
-
при выполнении clickhouse-backup restore <last backup> получаю code: 57, при том, что в файле sql этой таблицы поправил ALTER на CREATE. что нужно сделать ?
-
Добрый день! Пытаемся подключить ms sql по odbc к clickhouse. Но русские буквы отображаются некорректно. Есть какая-то настройка или особенность?
-
-
Всем привет. А подскажите по оптимизации kafka консьюмера. Есть топик на 8 партиций, и таблица в кликхаусе, на 8 консьюмеров с kafka_thread_per_consumer = 1. Процессор на 8 ядер. При потоке сообщений дольше 900k/s кликхаус не успевает вычитывать их из кафки, при этом грузит в 100% только пару-тройку ядер, вместо ожидаемых 8
-
ODBC unicode?
-
Пробовали оба драйвера ODBC unicode и ODBC ANSI
-
https://t.me/clickhouse_ru/207640
проверьте так【D】【J】 in ClickHouse не тормозитwindows нормальных не юникод клиентов не знаю odbctest есть но он кривой. Поэтому можете так попробовать: PS C:\Users\dj> $connectstring = "DSN=chDsn" PS C:\Users\dj> $sql = @' >> select * from testStr >> '@ PS C:\Users\dj> $conn = New-Object System.Data.Odbc.OdbcConnection($connectstring) PS C:\Users\dj> $conn.open() PS C:\Users\dj> $cmd = New-Object system.Data.Odbc.OdbcCommand($sql,$conn) PS C:\Users\dj> $da = New-Object system.Data.Odbc.OdbcDataAdapter($cmd) PS C:\Users\dj> $dt = New-Object system.Data.datatable PS C:\Users\dj> $null = $da.fill($dt) PS C:\Users\dj> $conn.close() PS C:\Users\dj> $dt A len_A - ----- вйцвцйв 14 value 5 если использовать анси драйвер вернется это. A len_A - ----- вйцвцйв 14 value 5 проверьте, может вы просто не тот драйвер пользуете...
-
ну и повторюсь, удачи...
https://t.me/clickhouse_ru/207643【D】【J】 in ClickHouse не тормозиттам 4 варианта ansi app-unicode driver unicode app - unicode driver ansi app - ansi driver unicode app - ansi driver поэтому удачи =)
-
Привет всем! Подскажите можно ли как то использовать фильтр по LIKE + IN для множества регекспов. Что-то в духе refdom LIKE IN ('%.com','%.ru')
-
всем привет
создал словарь через DDL
CREATE DICTIONARY mydict (
id Int32,
name String,
)
PRIMARY KEY id
LAYOUT(HASHED(PREALLOCATE 0))
SOURCE(…)
LIFETIME(3600)
но при использовании словаря приходится все равно ключ приводить к UInt64
select dictGet('mydict', 'name’, toUInt64(1) );
можно ли как-то сделать без обязательного приведения? -
только на complex_key_hashed/complex_key***
-
-
-
пользуйте UInt64
-
Ключ
ClickHouse поддерживает следующие виды ключей:
Числовой ключ. UInt64. Описывается в теге <id> или ключевым словом PRIMARY KEY.
Составной ключ. Набор значений разного типа. Описывается в теге <key> или ключевым словом PRIMARY KEY. -
Ключ и поля словаря | Документация ClickHouse
Ключ и поля словаря Секция <structure> описывает ключ словаря и поля, доступные для запросов. Описание в формате XML: <d
-
% - ни разу не регексп. Надо использовать multiMatchAny
-
опишите "нормальный".
-
если delete from xxx where - то нет
-
подскажите плз ни как не могу найти как из tuple перевести в String с разделителем
у меня tuple выходит из выражения dictGet('dict_users', ('fioF','fioO'), a.userId) as userName,
а мне по сути надо concat(fioF, ' ', fioO) -
попробовал через arrayStringConcat говорит что у меня не массив
-
в tuple через точку можно обращаться, попробуйте
dictGet('dict_users', ('fioF','fioO'), a.userId) as fio, concat(fio.1, ' ', fio.2) AS userName -
оООО ... спасибо
-
а как вы создавали словарь что можете сразу несколько значений достать? что-то у меня не получается
-
запросом )
-
ща поищу 5 сек
-
ну вот для примера
CREATE DICTIONARY dict_PPSources ON CLUSTER c9q930o5i86rsdloqlc9 (
id UInt64,
sourceName String,
out boolean,
parser boolean
)
PRIMARY KEY id
LAYOUT(HASHED())
SOURCE (MYSQL(
))
LIFETIME ( MIN 3600 MAX 28800) -
спасибо, видимо у вас версия новее, на 21.3 ругается
DB::Exception: Illegal type Tuple(String, String) of second argument of function dictGet, expected a const string -
вот так делаете ?
dictGet('dict_users', ('fioF', 'fioI', 'fioO'), a.userId) -
да
-
у нас 21.6.8.62
-
получение нескольких атрибутов одним вызовом возможно только с 21.4
-
понял, спасибо
-
какой именно .sql файл имеется ввиду?
зачем его править
можете поделиться результатам
LOG_LEVEL=debug clickhouse-backup restore <last_backup> ? -
Есть еще идеи почему появляется такая ошибка? Причем это не на все запросы
-
ошибка когда? Пользователи видят эту ошибку ? или вы видите ее в логах и вас это напряхает?
-
правильно
-
версия КХ ? это похоже на один починенный баг
-
20.7.2.30
-
проверьте с 20.8.19.4
-
Подскажите пожалуйста, если у нас now() используется в большом запросе с подзапросами, он может в подзапросах возвращать разные значения?
-
да
с клиента наверное лучше передавать и не использовать now() -
каждый подзапрос в КХ это отдельный запрос, который выполняется неконсистентно с другими (пока транзакций нет)
-
каждый поздапрос видит свой набор партов и свое now()
-
всегда так было - никто не жаловался
-
спасибо
-
😔
-
@vmakulov
@dj_mixer
@simpl1g
Привет!
Благодарен за ответы
Причина, по которой кластер переходил в r-o - лимит файловых дескрипторов. Поскольку с репликами тусуются апки которые юзают соединение по веб-сокету, нашего лимита, который мы юзали везде, и который как нам казалось завышен, - оказалось мало)
Думаю, вам полезно будет узнать 😉 -
Может быть такая ошибка когда что-то не корректно в запросе?
И еще важно то что когда запрос выплняю с роутера то запрос не выполняется (ошибка) И в логе то что писал выше. А когда выполняю на любой из нод то все работает как надо -
Запрос вида CREATE TEMPORARY TABLE IF NOT EXISTS tm ENGINE = Memory AS SELECT toDateTime и дальше.....
-
Received exception from server (version 21.8.4):
Code: 10. DB::Exception: Received from :9000. DB::Exception: Not found column multiIf(in(if(equals
И ошибка -
что такое роутер и какой программой вы выполняете запрос на роутере и какой на любой из нод?
-
Есть кластер у которого есть роутер с дистрибьютед базой и 2 шарда по 2 ноды
-
Так вот на люой из нод запрос отрабатывает корректно а вот там где дистрибьютед база - нет
-
Выполняю через clickhouse-client
-
Пипец у вас терминология. Это называется нода инициатор с дистрибьютид таблицами.
Зачем вам понадобилась такая схема?
КХ одинаковой версии на всех? Видимо проблема в том что без локальных таблиц неправльно выводятся типы. -
Одинаковой версии ClickHouse client version 21.8.4.51
-
Такая схема была изначально. Не я придумал. А чем она плоха?
-
У меня старый кластер с такойже конфигурацией и точно с такими же данными только версии 20.1.2.4 и там все работает
-
она плоха тем что ее используют .001% пользоватей и там есть баги которые видят только они
-
в реальности эти .001% пользоватей делают такую схему потому что они пихают в инициатор 2ТБ ОЗУ, а в шарды например по 128ГБ ОЗУ.
Т.е. они экономят бабло на ОЗУ -
потому что им например нужны финальные группировки и джойны которые можно сделать только на тачках с огромным кол-вом памяти.
-
То что нужно спасибо
-
да, все так. Вам в гитхаб и там вы будете долго и нудно рассказывать как у вас все устроено чтобы это можно было воспроизвести и починить
-
Всем привет, подскажите как обновить драйвер на dbeaver?
-
Database/Driver manager/Clickhouse/edit -> Download (Update)
-
-
мм, у вас китайская подделка clickhouse-native
-
по не китайской тоже самое
-
-
Подскажите можно ли как то ежедневно собирать count() всей базы и складывать её в агрегаты? Есть таблица с установками приложений, нужно в другую таблицу складывать total подписчиков каждый день аля в 00 по utc?
-
через что CH запускаете?
-
-
а если 0.2.6 выбрать как драйвер, тоже не работает?
-
в кнопке пуск
-
тоже
-
😒
-
встроенных шедулеров нету
-
а полностью ошибку?
я не верю, что у вас все версии одинаковые в кластере -
legacy_column_name_of_tuple_literal doesn't always work · Issue #26782 · ClickHouse/ClickHouse
With legacy_column_name_of_tuple_literal enabled I get an exception in some queries to LOCAL tables: Not found column in(...) in block. There are only columns: ..., in(..., tuple(...)) :) select co...
-
Добрый день! Подскажите, пожалуйста, при создании таблицы с engine = Kafka() и указанием ON CLUSTER будет ли синхронизация оффсетов между запускаемыми инстансами kafka consumer-ов?
-
Всем привет, есть задача
Таблица A с 4151822634 строк
Таблица B с 218028 строк
Мне нужно вывести все совпадения где A.Data = B.Data, но это жрет при JOIN слишком много памяти и я получаю DB::Exception: Memory limit (for query) exceeded
Есть ли возможность как либо вносить так, что бы данная задача была решена при меньшем количестве памяти.
MATERIALIZED VIEW идея не подходит
DATA - FixedString(24) -
SELECT * FROM A WHERE Data IN (SELECT Data FROM B)
-
+1
-
kafka engine это обычный консьмер и commit offset-ы хранятся в самой кафке (в смысле используется фича кафки про транзакции и офсеты) . kafka engine не хранит офсет и не знает про другие сервера и другие kafka engine
-
И ещё вопрос, если данные только внесены, то SELECT всегда выдает Code: 40. DB::Exception: Received from localhost:9000. DB::Exception: Checksum doesn't match: corrupted data. Reference: 1684eadeca07d1b886b1e452038b99a6. Actual: 85aff8915004a9b490093c682ec73788. Size of compressed block: 131596: (while reading column Hash): (while reading from part /mnt/data/sys/clickhouse/store/c5b/c5b0687d-3d4e-46db-85b0-687d3d4e66db/all_935_1097_3/ from mark 10008 with max_rows_to_read = 57344): While executing MergeTreeThread.
Можете подсказать из за чего это может происходить и в какую сторону копать?
Clickhouse 21.8.3.44 -
вы хотите сказать что вы вставляете строки в таблицу и если сразу делаете select то получаете ошибку DB::Exception: Checksum doesn't match: corrupted data
а если потом сделать запрос через некоторое время то ошибки нет? -
>(while reading column Hash)
какой тип данных и какие кодеки у Hash? skip indexes? projections? -
это конечно баг, который надо воспроизвести и исправить.
-
Скорее всего его можно обойти и в вашем сетапе
-
Тут странное поведение, делаю SELECT FORMAT Null и первая ошибка:
Reference: d6a0142d0d8415116386a28f421b15b6. Actual: 1ccc354bc20110ef5e02c0dd25949892.
Вторая ошибка:
Reference: d6a0142d0d8415116386a28f421b15b6. Actual: b206ac11013609e11096a6950a741fac.
У HASH явно ничего неуказано только Hash FixedString(16), -
Память и HDD проверял, вроде все тесты прошли ок, хотя я в этом не специалист
-
не надо показывать обрезки и пересказывать своими словами.
показывайте всю ошибку и запрос и лучше сразу в гитхабе.
и вы не ответили на мой вопрос https://t.me/clickhouse_ru/231442Denny Crane [Junior support specialist at Altinity (NB,Canada)] in ClickHouse не тормозитвы хотите сказать что вы вставляете строки в таблицу и если сразу делаете select то получаете ошибку DB::Exception: Checksum doesn't match: corrupted data а если потом сделать запрос через некоторое время то ошибки нет?
-
Нет, ошибка сохраняется всегда, но через какое то время Actual hash меняется
Data Skipping Indexes - нету
Projections - нету
DESCRIBE TABLE выводит информацию о Hash:
{
"name": "Hash",
"type": "FixedString(16)",
"default_type": "",
"default_expression": "",
"comment": "",
"codec_expression": "",
"ttl_expression": ""
}
Создам issue чуть позже
default_compression_codec.txt - CODEC(LZ4) -
Я попытаюсь сейчас перезаполнить базу и найти offset при какой информации данная ошибка возникает
-
Подскажите есть ли способ оптимизировать join
Есть запрос вида
SELECT ...
FROM log r
LEFT JOIN log AS origin ON r.typeId = 5 AND r.messageId = origin.messageId AND origin.typeId = 1
В r всего несколько записей с typeId равной 5, но при этом судя по времени выполнения джойнится пытаются все записи. Есть какой-то способ это обойти? -
маленькая таблица должна быть справа
-
-
Тут одна таблица сама с собой джоинится.
-
-
вот это условие зачем в секции джойна? r.typeId = 5
-
-
+-----------+--------+--------+
| messageId | typeId | InstId |
+-----------+--------+--------+
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 1 |
| 2 | 1 | 1 |
| 2 | 5 | NULL |
| 3 | 1 | 1 |
+-----------+--------+--------+ -
Мне нужно получить InstId для messageId 2 c typeId 5
-
И посичтать стату в разрезе instId
-
Получить instId пытаюсь через join на этот же messageId
-
Подскажите, селест из Distributed поверх ReplicatedMergeTree на кластере 3 шарда по 2 реплики читает только из 3 источников? (21.8.3.44)
-
да
-
А почему не из 6?
-
-
Мне нужна общая стата и данные нужно добрать только когда r.typeId = 5
-
Т.е. clusterAllReplicas не поможет?
-
запрос читает из 3 шардов, но выбирает реплику 1 из 2 рандомно
-
а что вам надо сделать? clusterAllReplicas будет читать со всех реплик
-
Надо железо более плотно использовать :) Пусть и виртуальное.
Чтение с 6 нод быстрее, чем с трех. -
вы хотите чтобы пол запроса ходило на 1 реплику а вторая на другую?
-
Наверное, я с КХ недавно.
-
надо SAMPLE на таблице + SET max_parallel_replicas=2
-
кажется надо хорошо дружить с КХ, чтобы всё медленнее не стало так)
-
Settings | ClickHouse Documentation
Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
я прочитал, поэтому и написал) слишком много ограничений и есть вероятность получить невалидные данные на выходе
-
Ну, да, похоже не то, что хотим, наверное.
-
-
Не, в смысле "на то". sampling - это же не уменьшение дюрабилити? :)
-
не делайте так. Это замедлит запросы.
-
Пашему?
-
max_parallel_replicas не работает ни у кого, оно не может работать если реплик меньше 10.
-
-
потому что это была кривая идея изначально.
-
А можно подробнее? Интересно же.
-
sampling 0.5 не дает ускорения в 99.999% случаев.
Максимальный sampling который имеет хоть какой-то смысл это 0.1 -
вот так будет работать https://github.com/ClickHouse/ClickHouse/issues/26748Parallel processing on replicas, reworked. · Issue #26748 · ClickHouse/ClickHouse
We want to parallelize data processing using multiple replicas of single shard. Every replica should process some split of data. There are the following considerations that makes the task non-trivi...
-
и sampling для #26748 не нужен
-
вот это прикольно
-
И когда это будет?
-
И да, насколько это будет стабильно? 🙈
-
А с 10 сможет? Это же оверхед дичайший!
-
может никогда, может через неделю
-
"потому что это была кривая идея изначально."
-
никто не пользуется max_parallel_replicas, ее Алексей порывался выпилить раза 3 уже
-
Ок, т.е. реплика на данный момент - это отказоустойчивость и ни в коем случае не ускорение. Я прав?
-
это ускорение. У нормальных людей 100-1000 запросов на кластере выполняется одновременно, загружены все 3 реплики (все 100-300 нод) равномерно
-
Ну вот мы не нормальные, нам нужно дофига писать/читать, чтение непредсказуемо, запись +/- постоянный поток.
Как лучше распределить БД на 100ТБ данных и 64/128 процов 1ТБ оперативы? -
Сейчас это 6 нод - 3 шарда по 2 реплики, по 32 цпу, 256ГБ
-
имеет смысл их поделить на более мелкие ноды?
-
одна железка?
-
Нет, конторская vCloud
-
ну сколько есть железных нод столько и делайте КХ
-
Эээ, кто ж мне даст столько :)
Вопрос - имеет смысл разделить на более мелкие ноды или укрупнить? -
укрупнять
-
тут скорее надо понять как устроена дисковая система, по цпу и памяти кол-во мало влияет.
у вас 3 шарда, если вы сделаете 6 и при этом суммарный i/o throughput увеличится потому что они попадут на разные железные серваки то это имеет смысл. -
можете сделать аналог circle replication.
чтобы реплики шарили cpu с основными инстансами
прописать load_balancing чтобы запросы выполнялись prefferred на основных -
Да, увеличится, iops рассчитываются по объему диска. Т.е. 6/12 будут читать с 6 датастор, а 3/6 с 3. Ок, понятно.
-
можно реплики задушить по cpu и memory
-
если реплики вообще имеют смысл (нужны)
-
Это же вЕсами решается, вроде?
-
с чего вы взяли
-
реплики нужны, 99,9 нужно гарантировать
-
Эээ, мы может быть о разном? Я про добаление новых мелких нод с удаление старых толстыз.
-
да я вообще не об этом. Я про то как заставить работать все процессоры даже для одного запроса
-
а, это вопрос отдельный, пока нет понимания о распределении нагрузки нормальном
да и нагрузки нет толком :)
вопрос отдельный - про чтение с дисков -
в пг - через сайтус получалось интересное, но их мс купил, хз чего ждать
в кх, вроде, не нужно параллельные ноды на одном серваке пускать? :) -
тут просто надо понять от чего защищаемся, все зависит от вашего vcloud. Может там выпадание железки вообще не приводит к нарушению работы.
я говорю про например такой вариант
железка1 железка3 железка3
-------------------------------------------------------------------
КХ1 шард1 реплика1 КХ2 шард2 реплика1 КХ3 шард3 реплика1
10 cpu / 200GB RAM 10 cpu / 200GB RAM 10 cpu / 200GB RAM
-------------------------------------------------------------------
КХ4 шард3 реплика2 КХ5 шард1 реплика2 КХ6 шард2 реплика2
3 cpu / 30GB RAM 3 cpu / 30GB RAM 3 cpu / 30GB RAM
load_balancing посылает запросы на реплика1 -
с чего бы вдруг на р1?
-
это неожиданный вопрос, я не знаю что ответить
-
ммм, сорри
-
мы видимо совсем про разное говорим
-
--send_logs_level=trace
-
я видел и вторую реплику
-
не знаю, чем вызвано
-
я говорю про setting КХ load_balancing который позволяет накрутить любые извращения
-
например у меня 3 датацента и в датацентрах разные реплики
-
и запросы выполняются внутри датацентра (шардированный запрос не ходит в др. датацетр)
-
потому что load_balancing = nearest_hostname
-
а можно для новичков поподробнее?
-
это лекция на 4 часа, мой час стоит $800
-
-
неплохо, мой меньше, но я в России
-
а то доставать общую стату за последний час около 6 сек (за всё время 9 сек), не прикольно как-то
-
на ум приходит только партиционирование
-
Вот, кстати, хороший вопрос, КХ индексы создает по сериал данным, он понимает дату?
-
🤔
-
но по часам это не вариант, смотрите индексы
-
а индексы вторичные по каким критериям создаются?
-
можно создать projection (select поля_первиного_ключа order by data), дальше очевидно
-
-
на сколько стабильны уже projections? в прод можно катить?
-
-
на 99%
-
нет
-
а что, прямо в реальном времени считать надо? если нет, то ведь можно рассчитывать статистику раз в N минут/секунд и хранить результаты в другой таблице, откуда выборка уже мгновенная
-
нет, по команде
-
Т.е. сломается по закону мерфи
-
ну кстати если надо какие-то статистики то тогда еще проще, можно прямо aggregating projection и там стату посчитать.
-
Коллеги, доброй ночи. Работаю в redash. На графиках нет возможности сделать референсные линии, поэтому пришла идея сделать отдельную серию с данными для референсной линии. Вопрос, как вставить строки в запрос, которые не существуют в БД?
-
ээ, вы не понимаете, там есть corner cases, которые еще не нашли, вы либо наступите прямо в testing либо никогда
-
Хорошая антиреклама redash
-
Redash отличная вещь. Но везде есть свои проблемы
-
если я вас правильно понял то ORDER BY WITH FILL
https://clickhouse.tech/docs/en/sql-reference/statements/select/order-by/#orderby-with-fillORDER BY | ClickHouse DocumentationORDER BY Clause The ORDER BY clause contains a list of expressions, which can each be attributed with DESC (descending)
-
Поскольку все эти законы эмпирические, вероятность в них ступить не отличается от н[оу]ля, поэтому "обязательно" в проде.
-
вот в этом чате есть несколько человек которые поставили 21.8 - в прод и нашли проблемы. Вот это ПРОСТОПИПЕЦПРОСТОПИПЕЦШЕСТЬРАЗ безумие ехать в прод со свежим КХ. А прожекшины в прод это фигня.
-
я запланировал переход на 21.8 на февраль и начал тестировать
-
Ага, я сам в аххх
-
clickhouse-client -nm -q "select version();"
21.8.3.44 -
автоапдейтер поставил
-
Спасибо, завтра попробую. Если я правильно понял, то в принципе можно сделать запрос из последовательности чисел, например ...from number (10)
-
кто же мог ожидать такой падлюки от образа от ИТ
-
ну тогда вам про прожекшины уже не стоит переживать
-
Проекции так то дропнуть можно в один запрос,
Даунгрейднутся это совершенно другая история -
ну да, серваку уже пара лет, я там месяц
-
А что за история с Projection? Я и не переживал, может, стоило?
-
нет никакой истории. Projection-ы у их автора работают в кластере из тысяч нод КХ с марта в проде. А 21.8 только вышел ничего толком непонятно.
-
Я тестировал Projection-ы и "продал" их кучке клиентов в Альтинити, они тестируют и тоже не находят проблем
-
"Я тестировал Projection-ы и "продал" их кучке клиентов в Альтинити, они тестируют и тоже не находят проблем" - Вы серьезно? А они знают, что тестируют?
-
в чем проблема. Я нашел и завел в гитхабе КХ багов больше чем вы найдете за 400 лет. Если я не нашел багов в Projection, то я считаю что там все неплохо и production ready
-
oui bien sur seigneur
-
я не знаю что вам ответить. Да я с автором обсуждал прожекшины еще до реализации, я почитал их код, потестировал, завел в гитхабе несколько ишью про них. Я думаю немного разбираюсь.
-
Вы странно отреагировали на мой вопрос, я не вижу проблем. Меряться письками на гитхабе? Зачем?
-
ну это странный вопрос "Вы серьезно? А они знают, что тестируют?"
они все тестируют. Тут грабли в любом месте ровно рассыпаны. Нужно все тестировать.
вот например
select toInt32('-2147483648')
┌─toInt32('-2147483648')─┐
│ -2147483648 │
└────────────────────────┘
select toInt32OrNull('-2147483648') ;
┌─toInt32OrNull('-2147483648')─┐
│ ᴺᵁᴸᴸ │
└──────────────────────────────┘ -
Ой, да ладно, пг:
2e31 "2e31";
2e31
══════════════════════════════════
20000000000000000000000000000000
select pow(2,31);
pow
════════════
2147483648 -
это как раз так и задумано.
как и select toDate('xaxa-01-01');
и это не будут исправлять -
У нашей конторы тоже три датацентра, расположенных географически близко друг к другу. Мы на тестовом кластере, который растянут на все три ДЦ, сделали как раз через https://clickhouse.tech/docs/en/operations/settings/settings/#load_balancing-nearest_hostname балансировку.
Идея вообще очень простая. Если IP/hostname по уму выставить, то реплика в локальном датацентре будет считаться "ближе", чем в удалённом, и запросы на неё пойдут. Там в документации пример есть.Settings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
Спасибо, вопрос не в этом, вопрос - как на все реплики чтение раздать :(
-
Ооо, ─equals(toDate('xfxb-01-01'), toDate('xhxb-01-01'))─┐
│ 1 │
└────────────────────────────────────────────────────┘ -
select toDate('xfxb-01-01') = toDate('xhxb-01-01');
-
Очешуеть
-
select toDate('0100-08-19') = toDate('0201-08-19');
SELECT toDate('0100-08-19') = toDate('0201-08-19')
Query id: 197e2654-c006-444e-9cdd-051cad35b12a
┌─equals(toDate('0100-08-19'), toDate('0201-08-19'))─┐
│ 1 │
└────────────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.002 sec. -
Здравствуйте, товарищи, у меня тупой вопросик, на ночь глядя, завелся: кликхаус умеет создавать json схемы своих таблиц?
-
КХ поддерживает даты в диапазоне от 1970 до 2103 и для некоректных дат делается либо сброс в 0 либо overflow
select toDate('2021-02-38');
┌─toDate('2021-02-38')─┐
│ 1970-01-01 │
└──────────────────────┘
select toDate('2021-02-31');
┌─toDate('2021-02-31')─┐
│ 2021-03-03 │
└──────────────────────┘ -
Подскажите, как можно дебажить таблицы с кафкой, добавил Kafka таблицу, данные не читаются через select * from hs_init_log_queue limit 1, в логах только
<Warning> StorageKafka (hs_init_log_queue): Parsing of message (topic: hs_init_log, partition: 4, offset: 2375) return no rows
Через kafcakat всё ок, есть много других таблиц с кафкой и там всё ок, версия 21.3 - 20 August 2021 (155 messages)
-
Коллеги, добрый день! Прошу помощи. При Union all возникает ошибка Error running query: Code: 386, e.displayText() = DB::Exception: There is no supertype for types String, Float32 because some of them are String/FixedString and some of them are not (version 21.4.3.21 (official build))
При этом все типы совпадают, указывал преобразование типов через CAST, не помогло -
Сообщение конкретное, что-то не досмотрели
-
как я понял, ругается на то, что в объединяемых таблицах разные типы данных?
-
Да, посмотрите toTypeName() на колонках
-
Вторую таблицу преобразовываю в float32 И string
-
-
SELECT
parameter as parameter,
grouping_var as grouping_var,
sum(perc) OVER (
PARTITION BY (grouping_var)
ORDER BY
parameter ROWS BETWEEN CURRENT ROW
AND UNBOUNDED FOLLOWING
) as total_perc
from
(
SELECT
l.parameter as parameter,
l.grouping_var as grouping_var,
l.parameter_count as parameter_count,
r.total,
(l.parameter_count) / r.total * 100 as perc
from
(
select
tupleElement(parameter, {{ Показатель }}) as parameter,
tupleElement(grouping_var, {{ grouping_list }}) as grouping_var,
count(parameter) as parameter_count
from(
SELECT
tuple(PM, rulon_mark) as grouping_var,
tuple(
SCT_index,
SCT_var,
SCT_value,
CMT_index,
CMT_var,
CMT_value,
BST_index,
BST_var,
BST_value,
Strength,
Cobb,
rulon_massa_avg,
rulon_razber_g,
rulon_razber_perc,
Hum,
Hum_razbeg
) as parameter
from
default.PhizMex
where
tambur_date between '{{ ВременнойИнтервал.start }}'
and '{{ ВременнойИнтервал.end }}'
and (
is_reject == 0
or is_reject IS NULL
)
AND rulon_mark IN ({{ СписокМарок }})
and rulon_massa IN ({{ Граммаж }})
and PM in ({{ БДМ }})
)
group by
parameter,
grouping_var
) as l
LEFT JOIN (
SELECT
grouping_var,
count(parameter) as total
FROM
(
SELECT
tupleElement(grouping_var, {{ grouping_list }}) as grouping_var,
tupleElement(parameter, {{ Показатель }}) as parameter --tupleElement(parameter,{{ Показатель }})) as total
--rulon_mark,
--PM
from
(
select
--rulon_mark,
--count(SCT_index) as total,
tuple(PM, rulon_mark) as grouping_var,
tuple(
SCT_index,
SCT_var,
SCT_value,
CMT_index,
CMT_var,
CMT_value,
BST_index,
BST_var,
BST_value,
Strength,
Cobb,
rulon_massa_avg,
rulon_razber_g,
rulon_razber_perc,
Hum,
Hum_razbeg
) as parameter --PM
from
default.PhizMex
where
tambur_date between '{{ ВременнойИнтервал.start }}'
and '{{ ВременнойИнтервал.end }}'
and (
is_reject == 0
or is_reject IS NULL
)
AND rulon_mark IN ({{ СписокМарок }})
and rulon_massa IN ({{ Граммаж }})
and PM in ({{ БДМ }})
)
)
group by
grouping_var
) as r using (grouping_var) --order by
--PM,
--rulon_mark,
--SCT_index
)
UNION ALL
Select
CAST(number, 'Float32') as total_perc,
CAST({{ Норма }}, 'Float32') as parameter,
CAST('Норма', 'String') as grouping_var
from
numbers(100) -
Есть у кого нибудь идеи?
-
проблема именно с колонкой String, ее убираешь из запроса и все соединяет
-
Порядок колонок сделайте одинаковым в обоих запросах
-
Спасибо! Реально помогло.
-
Коллеги, помогите еще раз чайнику плиз. Пытаюсь заставить clickhouse отвечать на запросы с другого сервера. Все строго по инструкции. Итак, clickhouse слушает порт
-
8123, что проверяем по lsof -i:8123
-
Все ок. Теперь раскрываем строку где указывается сервер для обращения наружи. Т.е. вводим строку
-
<listen_host>::.</listen_host>
-
"Вводим" - это снимаем комментарии.
-
Результат после перестартовки сервера - он вообще перестает слушать порт 8123. Т.е. проблемв в нарушении синтаксиса конфига скорее всего. Но в чем?
-
Вроде и ошибиться тут негде. Вернул комменты на место - снова стало все слушаться
-
Вообще не редактируйте конфиг
-
А как же добавить внешние сервера?
-
Если с другой тачки пинг к 8123 отвечает Ок, то всё в порядке
-
Curl по адресу и порту 8123 не достукивается
-
Но остальные сервисы этой машины вполне доступны
-
Ищите в сетевой доступности проблему
-
Все доступно.
-
Кроме сервиса clickhouse
-
Разве это не ipv6 слушать? Попробуйте указать там просто 0.0.0.0
-
Привет, подскажите пожалуйста почему
select a,
argMaxIf(c, b, d = 510),
argMinIf(c, b, d = 510)
from (select 2 as a, 3 as b, 51 as c, 510 as d
union all
select 2 as a, 3 as b, 55 as c, 510 as d)
group by a
выдает одинаковый результат для обоих arg функций? По логике 51,55 результат должен быть
v.21.3.3.14 -
Глянул в доку. Да :: слушать все. Но для ipv4 достаточно по идее 0.0.0.0
Для теста можете проверить. -
Результат фантастический. Стала пускать с другой машины но перестало слушать ipv6
-
Добавьте ещё строку для v6
-
Ну все сходится. Чтобы слушать ipv6 в том числе судя по доке надо <listen_host>::</listen_host>
Точка вроде как лишняя -
Вообще перестала слушать все порты
-
О блин. В доке точка это конец предложения.
-
argMax берёт не максимальное значение c, а сначала берёт максимальное b, и потом возвращает c которое с ним в одной строке. Так как в вашем случае b одинаковый, оно для min/max берёт первое значение с. Поменяйте b чтобы увидеть разницу
-
А вообще дока велит такое все выносить в пользовательские конфиги. В users.d. сделал файл root.xml - вообще асе сломал
-
Не то она велит
-
Какую-то вы хрень мутите
-
Вы же не users.xml правите, а config.xml
-
В общем одну строку listen_host конфиг допускает. Две нет. Но теперь с другой машины пускает
-
всем привет! я новенький в КХ, поэтому сильно не пинайте за нубские вопросы:) Скажите в КХ есть вьюшки подобные тем что есть в postgres или oracle, по которым можно определить какие запросы чего ждут (IO, CPU, какие-то внутренние локи и тд) во время выполнения, сколько запрос прочитал и записал. Или ест какой-то другой подход в определении основных источников нагрузки в пиковые периоды?
-
system.processes
system.query_log
Последний включать надо в конфигах -
Есть ещё. Смотрите доку
-
спасибо! system.processes это мгновенное состояние системы в момент обращения к ней, или это запросы туда попадают только по завершению?
-
Это текущие.
Вся история в query_log -
К чему это гадание на кофейной гуще. Смотрите ошибку в логах.
-
А как это сделать? Я не умею. Помогите плиз
-
грепайте /var/log/clickhouse-server/clickhouse-server.log
(как один из вариантов) -
Для начала попробуйте использовать кнопку "ответить" и писать одну мысль в одном сообщении, а не в 10. Читайте документацию по кликхаусу. Используйте поиск по чату. Для этого не требуется особых умений. Только немного внимательности и всё.
-
Всем привет, хочу добавить индекс ngrambf для строковых колонок со значениями в 2-3 символа,
какие оптимальные значения поставить для этого индекса учитывая 44млн записей? -
Добрый день. Подскажите пожалуйста по такой проблеме.
Пытаюсь вставить/перелить данные из постгреса в кликхаус. В табличке постгреса есть timestamp поле.
created_at timestamp(0) without time zone NOT NULL
В табличке кликхауса это
created_at DateTime
Делаю
INSERT INTO таблица_в_кх SELECT created_at FROM PostgreSQL(подключение_к_пг)
Выдает ошибку
DB::Exception: Cannot parse datetime: Cannot parse DateTime from String: while converting source column mode to destination column created_at: while executing 'FUNCTION CAST(mode :: 9, DateTime :: 12) -> CAST(mode, DateTime) DateTime : 11'.
Если попробовать просто выбрать какую-нибудь одну запись из пг, то в created_at вроде валидные данные - 2021-08-20 11:09:15. Если эту же запись попробовать вставить, то выдается ошибка. -
а колонка mode у вас есть? возможно стоит указать колонку в которую вставляет для надёжности INSERT INTO таблица_в_кх (created_at) SELECT timestamp AS created_at
-
Да, там несколько столбцов еще, в том числе mode, решил опустить для удобства. Прямое указание колонок помогло, спасибо.
-
День добрый. а как лучше добавить колонку к 2 Тб таблице и заполнить ее значением по join с другой таблицей?
-
как оптимизировать nullable(string) поля, их ведь нельзя включать в индексы
-
не использовать nullable без особой на то надобности. Оно точно-точно нужно? Никак без него не выходит?
-
Добрый день. А кто-ниб сталкивался с сообщением
2021.08.20 09:39:28.447039 [ 130 ] {} <Warning> StorageKafka (kafka_nested_json): Parsing of message (topic: <topic_name>, partition: 2, offset: 50533186191) return no rows.
Это говорит о потере данных в момент импорта Kafka-Engine-ом?
В репо есть 1 тест (правда там не JSONEachRow как у меня, а JsonAsString формат) https://github.com/ClickHouse/ClickHouse/blob/b33391f4ec8162e9f17c5e861a18937265833d03/tests/integration/test_storage_kerberized_kafka/test.py и такое сообщение в логе как раз про ту строку, что пустая. В моем случае из топика приходит 100% непустое сообщение.ClickHouse/test.py at b33391f4ec8162e9f17c5e861a18937265833d03 · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
У меня такое, вчера спрашивал, но никто не ответил) Пока есть подозрение что какая-то колонка кривая. Пересоздал кафка таблицу с 2 простыми колонками и стало нормально консьюмить, сейчас вот пересоздаю с большим числом колонок и перепроверяю
-
Спасибо!
-
Привет, появилась нужда в таблице поле переделать с Int64 на UUID, думал переименовать старую таблицу, создать новую с таким же именем но уже с полем UUID и со старой перегнать данные. Нормально? Или есть способ лучше?
-
Какой есть хороший способ скопировать здоровую таблицу в другую с возможность изменения значения в поле?
100+ гиговую таблицу нужно скопировать в новую и одно поле заполнить сгенеренными UUID -
Просто dml командами?
-
Попробую, спасибо
-
а у кого-то было так, что запрос вечно висит к system.mutations и из-за этого Оператор Клика выедает все коннекты к бд.?рестарт не помогает
-
-
В массивах и строках 1-индексация, но передали индекс 0
-
Спасибо, действительно в substring 0 указал
-
Подскажите по поводу JSONExtract
запускаю кверю
with '{"string_value":null}' as json
select JSONExtract(json, 'string_value', 'Nullable(String)');
на v.21.7.7.47 - результат налл
на v.21.8.3.44 - результат строка 'null'
что изменилось между версиями? в чейндж логе ничего касаемо стрингов не вижу -
если null c большой буквы то нормально работает
WITH '{"string_value":Null}' AS json
SELECT JSONExtract(json, 'string_value', 'Nullable(String)')
Query id: dc5fdae7-050e-4919-b1b8-0bb13e846edf
┌─JSONExtract(json, 'string_value', 'Nullable(String)')─┐
│ ᴺᵁᴸᴸ │
└───────────────────────────────────────────────────────┘ -
если null это ок в JSON то пишите багу на гитхаб
-
"Null" это не валидный JSON
-
пишите багу тогда
-
-
проще добавить новую колонку с полем uuid, а потом удалить существующую и переименовать новую в старую. тогда на диск будет записываться инфа только о новой колонке, а не все 100 гигов
-
там могут получится не уникальные записи
-
если убрать id
-
так у вас же к этому моменту будет новый id на основе uuid
-
А, тоесть добавить поле uuid, заполнить и потом уже заменить поле id&
-
ну да, можно по идее даже при создании его заполнить сразу написав DEFAULT generateUUIDv4()
-
у меня ORM infi.clickhouse и это в проекте джанго всё, вот думаю как миграцию теперь сделать, чтобы она сработала потом на разных платформах, где будут её делать
-
но за идею спасибо
-
попробу.
-
3 sql запроса, что там думать то :)
-
Да в принципе да, наверное ты прав
-
не получится если id входит в PK
DEFAULT generateUUIDv4() -- будет генерится в момент селекта (надо записать default на диск мутацией)
зачем нужен uuid ? int64 меньше места на диске занимает и вдвое быстрее -
у нас появляются дубли при генерации id такого типа
-
как генерите-то?
-
рандом завязанный на времени и ещё кое что, думали прокатит
-
и оно канало, пока воркеров не стало 1к+
-
решили попробовать на uuid4 переехать, там шансы поидее такие маленькие, что должно работать
-
ну так велосипедисты. facebook snowflake, sony sonyflake
-
GitHub - sony/sonyflake: A distributed unique ID generator inspired by Twitter's Snowflake
A distributed unique ID generator inspired by Twitter's Snowflake - GitHub - sony/sonyflake: A distributed unique ID generator inspired by Twitter's Snowflake
-
ну да, мне в наследство досталось
-
GitHub - twitter-archive/snowflake: Snowflake is a network service for generating unique ID numbers at high scale with some simple guarantees.
Snowflake is a network service for generating unique ID numbers at high scale with some simple guarantees. - GitHub - twitter-archive/snowflake: Snowflake is a network service for generating unique...
-
а в кх ничего встроенного не планируется для генерации snowflake id?
-
не хочется вязаться на внешнее чтото
-
я бы так и из редиса мог получать id из последовательности
-
ээээ зачем? Оно нужно для дистрибьютид клиентов
-
??????
это не внешнее, это алогритм, кусок кода на 100 строк -
feat: add conversions between snowflake id and dateTime(dateTime64) by jasine · Pull Request #27704 · ClickHouse/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
-
это в другую сторону, это не генерация
-
лучше редис тогда, сделать и забыть. иначе генерация uuid на уровне кликхауса не гарантирует, что у вас не будет конфликтов, хотя она точно лучше чем ваш велосипед
-
там есть dateTime64ToSnowflake, а значит можно dateTime64ToSnowflake(now64())
-
А что лучше sonyflake или uuid4?
-
-
это было бы очень странно
-
это конвертация формата, а в качестве генератора текущая дата - так себе уникальный генератор :)
-
sonyflake 64бита и монотонный
-
понял, спасибо, пойду изучать
-
может это то что нужно
-
причем now64() одинаковый в рамках запроса
-
-
-
-
Всем привет!
Есть таблица (фото приложила), в столбце value некоторые значения идут через запятую
Подскажите, пожалуйста, какой функцией воспользоваться, чтобы этот массив разделить и преобразовать в Integer?
т.е. из одной строки
Подсолнечное | brand | 100104821,141376535,138876675,137859685
должно получиться 4 строки -
-
splitByChar или splitByRegexp потом arrayJoin
-
можно использовать splitByChar + arrayMap
но проще всего cast ( [|| ||] , 'Array(Int64)') -- и кстати это быстрее работает -
👍🏻👍🏻
-
круто
-
Спасибо!
-
Подскажите как t начать с 02:00:00?
SELECT toStartOfInterval(c_date_create, INTERVAL 3 HOUR) as t, c_date_create, id_type_source, c_status, count()
FROM ta_orders
WHERE c_date_create >= '2019-12-30 02:00:00'
GROUP BY c_date_create, id_type_source, c_status
ORDER BY c_date_create, id_type_source, c_status -
? t >= '2019-12-30 02:00:00'
-
Обрежет до 2019-12-30 03:00:00
-
t >= toDateTime('2019-12-30 02:00:00', 'UTC')
-
Неа) Все равно до 2019-12-30 03:00:00 режет
-
?
t >= toDateTime('2019-12-30 02:00:00', 'Europe/Moscow')
а данные вообще есть? -
Есть. И время все в UTC
-
ааа.... в смысле это вывод JDBC, это не кх клиент. Вот я слепой.
Это java конвертит в TZ вашего десктопа.
вот так
SELECT toString(toStartOfInterval(c_date_create, INTERVAL 3 HOUR) as t), c_date_create, id_type_source, c_status, count()
FROM ta_orders
WHERE c_date_create >= '2019-12-30 02:00:00'
GROUP BY c_date_create, id_type_source, c_status
ORDER BY c_date_create, id_type_source, c_status -
Так же выводит и клиент CH тоже самое выдает...
-
select timezone()
-
-
без toStartOfInterval тоже так?
-
Вывод идет нормально, от 2019-12-30 02:00:00
-
-
А есть варианты?
-
-
Костыль
date_add(HOUR, 2, toStartOfInterval(mn.c_date_create, INTERVAL 3 HOUR)) -
#вакансия #удаленка
Вакансия: DBA ClickHouse
Компания: РА Selecty
Город: Москва
Формат работы: remote
Занятость: full time
Компенсация: 150000 - 200000 net., без учета премий
Всем привет! Мы находится в поисках Старшего Администратора СУБД ClickHouse в одну из крупнейших ритейл компаний РФ.
🔸Задачи:
- Администрирование СУБД ClickHouse (single instance, Cluster);
- Автоматизация задач по сопровождению СУБД по средствам Ansible;
- Мониторинг СУБД на базе Zabbix;
- Решение инцидентов, запросов пользователей в части БД как 3 линия поддержки;
🔸Пожелания к кандидату:
- Знание СУБД ClickHouse в части DBA;
- Навыки проведения Backup/Recovery для СУБД ClickHouse;
- Уверенные знания SQL;
- Знания Shell, python, ansible - как преимущество;
- Знания Linux, на уровне администратора, необходимые для поддержки СУБД ClickHouse;
- Навыки работы с Git - будут плюсом.
🔸Условия:
- Гибридный график работы (офис/дом);
- ДМС со стоматологией;
- Оформление по ТК РФ.
🔸Если заинтересует, я здесь 24/7 @papabooo
или на почту andrey.boyko@selecty.ru -
Доклад про хэш-таблицы: https://habr.com/en/company/yandex/blog/572588/C++ zero-cost abstractions на примере хеш-таблиц в ClickHouse. Доклад Яндекса
Хеш-таблицы — это королевы структур данных. Нигде не сломано так много копий, как на оптимизации хеш-таблиц. В докладе я рассказал ещё об одной хеш-таблице, которая используется в ClickHouse. Вы...
-
None
-
Поменял nullable на string с дефолт значением через alter, кк сказал ок но при селектах выдает еррор что не может закастовать нуллабл в стринг
-
kill mutation. Меняете назад. alter update x = '' where x is null. потом снова alter
-
Да как написал сразу понял как делать) , если в дальнейшем буду делать индексы лучше какое нибудь дефолтное значение делать или пустую строку оставлять?
-
при чем индексы?
alter не умеет nullable в not nullable конвертить, ему пофиг на дефолты -
Я не про это, а то что пустая строка в будущем для индекса ngram будет пропускатся
-
-
-
-
-
нет. Количество, имена и типы колонок в SQL известны до выполнения запроса.
-
-
Fuse some aggregate functions, part 2. · Issue #25961 · ClickHouse/ClickHouse
Continuation of #20091 If query has multiple quantile aggregate functions with the same arguments but different level parameter: SELECT quantile(0.5)(x), quantile(0.9)(x), quantile(0.95)(x) FROM .....
-
- 21 August 2021 (1 messages)
-
вот нафига это постить? привлечь внимание? камингаут, как это сейчас модно?
- 22 August 2021 (4 messages)
-
Да вы зануда
-
😂😂😂 честно говоря, не постил, наверное мой телефон живёт своей жизнью
-
Это потому что на телефоне не установлен clickhouse)
-
В точку😂
- 23 August 2021 (117 messages)
-
-
visitParamExtractString
-
Не годится мне надо из всей структуры
-
-
Перед отправкой принять изменения
-
-
😳
-
Что можно сделать если CH 21.8.4 умирает периодически (несколько раз в час) с такой ошибкой? 21.7 то же самое. Других логов нет.
<Fatal> Application: Child process was terminated by signal 11. -
используется Linux 5.4.0-1049-aws x86_64 без Docker или чего-то подобного
-
Signal 11, or officially know as "segmentation fault", means that the program accessed a memory location that was not assigned. That's usually a bug in the program. So if you're writing your own program, that's the most likely cause. However, this FAQ will concentrate on the possibilities besides that.
смотри в dmesg, ООМа там нет? -
-
в syslog ничего нет, а dmesg не знаю как смотреть - есть какая-то команда? он вроде boot logs показывает и ничего больше
-
dmesg -T | grep 'kill'
ООМ тоже показывает -
пусто
OOM в syslog видно обычно
памяти вроде достаточно + есть earlyoom - все нормально -
-
я так понимаю может быть все что угодно :)
судя по тому что у других работает - пробелема в моем конфиге или КХ клиенте... -
или в железе
-
формат CSVWithNames
-
лучше всего 1) поставить пакет с дебажными символами clickhouse-common-static-dbg 2) посмотреть pid процесса ClickHouse например через pidof clickhouse
3) запустить gdb(вероятнее всего sudo -u clickhouse gdb чтобы были права)
4) Настроить чтобы лишнее не останавливало
handle SIGPIPE nostop
handle SIGHUP nostop
handle SIGUSR1 nostop
handle SIGUSR2 nostop
set pagination off
5) сделать attach <pid> потом continue
6) когда появится ошибка сделать thread apply all bt full
И потом нести в issues -
спасибо, буду пробовать
-
Привет. Подскажите, пожалуйста, как в настройках секции ldap указать, чтобы при подключении юзера его sAMAccountname мапился к CN?
-
Парни всем привет.
Кто сталкивался с clickhouse driver bad connection
Дестанейшон правильный, с хоста до базы достучаться могу, захожу все ок, креды тоже правильные.
Но по таймауту при попытке подключения из когда конект валится.
Может было у кого?
——
Вопрос в гоконфу задавал, но там не ответили, может кто отсюда посоветует что нибудь -
Добрый день, подскажите пожалуйста как можно получить в КХ из вот этого
name state dt
A X 0
A X 1
A X 2
A Y 3
A Y 4
A X 5
A X 6
вот это:
name state dt
A X 0
A Y 3
A X 5 -
ну тут поможет сдвиг на единицу вниз
A X 0 A X 1
A X 1 A X 2
A X 2 A Y 3 if(A Y != A X, 1, 0)
A Y 3 A Y 4
A Y 4 0
потом просто where = 1 -
Добрый день, много таймаутов от кк и цпу иногда загружен на 100% (не постоянно) как решали? Это изза слияния кусков данных в фоне? Думаю возможно это изза того что вставляю пачками по 1к строк(или 1 минута) и этого мало, и он делает процесс слияния много раз, по сколько строк за раз оптимально вставлять?
-
а через что посоветуете сдвиги реализовать?
-
если новая версия то https://clickhouse.tech/docs/en/sql-reference/window-functions/
если старая то neighborWindow Functions | ClickHouse Documentation[experimental] Window Functions ClickHouse supports the standard grammar for defining windows and window functions. The
-
ясно, спасибо!
-
-
при where=1 получается результат вот такой
A X 2
A Y 4
A X 7 -
-
sequenceCount('(?1)(?t<20000)(?2)(?t<20000)(?3)')
-
ммм, where if(A Y != A X, 1, 0) = 1
-
-
-
-
А каким образом перестал, какие ошибки?
-
https://stackoverflow.com/a/22640362
Я думаю это подойдёт -
Из того что вижу
<Error> auto DB::IBackgroundJobExecutor::jobExecutingTask()::(anonymous class)::operator()() const: Code: 236, e.displayText() = DB::Exception: Cancelled merging parts, Stack trace (when copying this message, always include the lines below):
Default
2021-08-23 13:19:00.109 MSK
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x8b5b17a in /usr/bin/clickhouse
И затем всегда стало
<Error> Application: DB::ErrnoException: Cannot read from file /proc/self/statm, errno: 29, strerror: Illegal seek -
-
-
похоже они убрали minivm sandbox и это что то с gvisor Container Sandbox: Unsupported syscall renameat2(0xffffff9c,0x3ea665ca40b0,0xffffff9c,0x3ea665ca3ff0,0x1,0x3ea680039558). It is very likely that you can safely ignore this message and that this is not the cause of any error you might be troubleshooting. Please, refer to https://gvisor.dev/c/linux/amd64/renameat2 for more information.
-
-
-
create table test.tmp (name String,state String,dt UInt8)Engine=Memory() ;
insert into test.tmp values
('A','X',0)
('A','X',1)
('A','X',2)
('A','Y',3)
('A','Y',4)
('A','X',5)
('A','X',6)
('A','X',7);
select
name,
(arrayJoin(tuple_ll) as ll).1 state,
ll.3 next_state,
ll.5 change_dt,
ll.4 next_change_dt,
if(state <> next_state, 1,0) flag
from
(
select
name, arrayMap( a, b, c, d, e -> (a, b, c, d, e),
groupArray(state) as im,
groupArray(dt) as dts,
arrayPopFront(arrayPushBack(im, 'M')),
arrayPopFront(arrayPushBack(dts, 100)),
dts) tuple_ll from(
select *
from
test.tmp
order by
name, dt) a
group by
name ) where flag=1; -
-
Нашел run.googleapis.com/execution-environment: gen2 в альфе фиксит
-
-
renameat2 не обязателен.
А вот невозможность прочитать /proc/self/statm более важна.
А что такое execution-environment: gen2? Я в этом не разбираюсь... -
Есть какие-нибудь новости? Может откопали что-нибудь?
-
Они крутят контейнера в песочнице https://github.com/google/gvisor и в ней реально какие то вещи нереализованы. С год назад они стали тестировать новые песочницы типа minivm (даже не знаю что это) но какие то проблемы что мы имели с gvisor даже в ноде приложениях ушли. Так как это альфа то предполагаю что они просто переназвали новую песочницу ка gen2 и поменяли параметр был sandbox=minivm стал execution-environment=gen2 поэтому у нас все слетело.
А тот же clourun очень удобен для PR деплоев, тестов и тп.GitHub - google/gvisor: Application Kernel for ContainersApplication Kernel for Containers. Contribute to google/gvisor development by creating an account on GitHub.
-
Сложновато, через neighber проще должно было быть
-
Ещё проверьте, может быть в версии 21.8 нет такой проблемы? Дело в том, что там файл читается с помощью pread, а не lseek + read.
-
Спасибо проверю
-
sequenceCount('(?1)(?t<20000)(?2)(?t<20000)(?3)')
выдает такую ошибку
Pattern application proves too difficult, exceeding max iterations (1000000): While executing ConvertingAggregatedToChunksSource
При попытки его обработать например, через sum, или having -
-
SELECT (sum(col) AS sumcol) AS s
-
-
-
чтобы использовать промежуточное значение дважды, например в двух разных колонках
-
А почему нельзя его же использовать?
-
потому что промежуточное значение может быть выражением без алиаса. например:
select ((sum(a)+sum(b)) as s)*2 as sX2, s*3 as sX3 -
Но это не этот случай кмк
-
А кто как поднимает QPS на запросах с малой выборкой данных? query_log , granularity, max_threads испробовано. Получили 166 QPS
-
uncompressed_cache
вы статью clickhouse in the storm читали? -
вот последний момент из той статьи сейчас пробуем
-
увеличение до 186 QPS. Есть что поэффективнее?)
-
Ну что за таблица, что за запросы,
сколько строк они читают -
Таблица узкая 10 столбцов, запрос возвращает 1 агрегированную строку (сумму). Гранулярность 128. Прочитывает порядка 256 строк
-
Большая таблица?
-
буквально 200 Мб
-
Какая версия кх?
-
21.5
-
И кол-во строк в таблице
-
сейчас запросы стали почему то оочень медленно выполняться, то что раньше улетало за секунду сейчас не может и за 30 выполниться, причем даже на маленькой выборке, причем пару дней назад все было ок с теми же запросами. Куда порекомендуете посмотреть ?
-
Кх нужно читать блок сжатия, что есть примерно 65к байт
те для UInt64 это будет примерно гранул 70
Можно попробовать отключить сжатие -
14 650 000
-
хорошо, откулючение сжатие на таблице и еще что можно предпринять?
-
SELECT * FROM system.query_log WHERE query ILIKE 'alter%';
-
версия 20.3.7.46 там не было еще этой таблицы видимо
-
-
диск был забит на 97% освободил немного места, расширю на днях. А так пока даже нет идей куда залезть посмотреть еще
-
Linux Performance Checklists for SREs
Linux Perf Analysis in 60s (https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55)
1. uptime ⟶ load averages
2. dmesg -T | tail ⟶ kernel errors
3. vmstat 1 ⟶ overall stats by time
4. mpstat -P ALL 1 ⟶ CPU balance
5. pidstat 1 ⟶ process usage
6. iostat -xz 1 ⟶ disk I/O
7. free -m ⟶ memory usage
8. sar -n DEV 1 ⟶ network I/O
9. sar -n TCP,ETCP 1 ⟶ TCP stats
10. top ⟶ check overview
Linux Disk Checklist
1. iostat -xz 1 ⟶ any disk I/O? if not, stop looking
2. vmstat 1 ⟶ is this swapping? or, high sys time?
3. df -h ⟶ are file systems nearly full?
4. ext4slower 10 ⟶ (zfs*, xfs*, etc.) slow file system I/O?
5. bioslower 10 ⟶ if so, check disks
6. ext4dist 1 ⟶ check distribution and rate
7. biolatency 1 ⟶ if interesting, check disks
8. cat /sys/devices/…/ioerr_cnt ⟶ (if available) errors
9. smartctl -l error /dev/sda1 ⟶ (if available) errors
* Another short checklist. Won't solve everything. ext4slower/dist, bioslower/latency, are from bcc/BPF tools.
Linux Network Checklist
1. sar -n DEV,EDEV 1 ⟶ at interface limits? or use nicstat
2. sar -n TCP,ETCP 1 ⟶ active/passive load, retransmit rate
3. cat /etc/resolv.conf ⟶ it's always DNS
4. mpstat -P ALL 1 ⟶ high kernel time? single hot CPU?
5. tcpretrans ⟶ what are the retransmits? state?
6. tcpconnect ⟶ connecting to anything unexpected?
7. tcpaccept ⟶ unexpected workload?
8. netstat -rnv ⟶ any inefficient routes?
9. check firewall config ⟶ anything blocking/throttling?
10. netstat -s ⟶ play 252 metric pickup
* tcp*, are from bcc/BPF tools.
Linux CPU Checklist
1. uptime ⟶ load averages
2. vmstat 1 ⟶ system-wide utilization, run q length
3. mpstat -P ALL 1 ⟶ CPU balance
4. pidstat 1 ⟶ per-process CPU
5. CPU flame graph ⟶ CPU profiling
6. CPU subsecond offset heat map ⟶ look for gaps
7. perf stat -a -- sleep 10 ⟶ IPC, LLC hit ratio
* htop can do 1-4. I'm tempted to add execsnoop for short-lived processes (it's in perf-tools or bcc/BPF tools).
https://www.brendangregg.com/blog/2016-05-04/srecon2016-perf-checklists-for-sres.html -
оо спасибо
-
-
имеете в виду матвью или materialized колонки?
-
-
у нас есть таблицы, на которые смотрит >20 матвью
все норм работает, потерь нет -
Спасибо.
-
-
-
Всем привет. Подскажите пожалуйста что не так с now()
CREATE TABLE history.cdr_test ( ficdr_id UInt64, fiproduct_id UInt32, facontext_create DateTime('UTC'), ) ENGINE = ReplicatedReplacingMergeTree();
INSERT INTO history.cdr_test VALUES (1, 20, now('UTC'));
SQL Error [62]: ClickHouse exception, code: 62, host: 10.60.61.175, port: 8123; Code: 62, e.displayText() = DB::Exception: Cannot parse expression of type DateTime('UTC') here: now('UTC')) (version 20.3.19.4 (official build)) -
Если вы используете DateTIme UTC то и now('UTC') используйте
-
Так я и использовал.. тока вот ошибка
-
На 21.9 ваш пример нормально сработал
CREATE TABLE history.cdr_test
(
`ficdr_id` UInt64,
`fiproduct_id` UInt32,
`facontext_create` DateTime('UTC')
)
ENGINE = ReplacingMergeTree
ORDER BY ficdr_id
Query id: 4774d928-a7c9-4428-a244-cde2ee200016
Ok.
0 rows in set. Elapsed: 0.012 sec.
INSERT INTO history.cdr_test VALUES
Query id: 14cb254f-a926-42f6-88ba-ee0b38b5a905
Ok.
1 rows in set. Elapsed: 0.017 sec. -
раньше не было аргументов у now
-
v20.10.3.30, 2020-10-28
The function now allows an argument with timezone. This closes 15264. #15285 (flynn). -
нет никаких жестких правил. https://stackoverflow.com/questions/68679023/clickhouse-maximum-amount-of-materialized-views-per-base-table/68681710?noredirect=1#comment121741644_68681710Clickhouse maximum amount of materialized views per base table
Is there any limits or recommendation for maximum amount of materialized views per base table? I aim to generate several statistics reports from a table containing raw data (which contains up to 1B
-
Спасибо, нашел причину потерь, они кроются в физических проблемах с дисковой подсистемой
-
узкое место не в КХ ?
"select 1" сколько QPS ?
есть такая утилита , ей померяйте свой запрос прямо на сервере КХ
clickhouse-benchmark -c 50 <<< 'select 1'
localhost:9000, queries 12806, QPS: 12866.100, RPS: 12866.100, MiB/s: 0.012, result RPS: 12866.100, result MiB/s: 0.012.
clickhouse-benchmark -c 50 <<< 'select avg(number) from numbers(1000000)'
localhost:9000, queries 7117, QPS: 7145.613, RPS: 7489174572.842, MiB/s: 57137.868, result RPS: 7145.613, result MiB/s: 0.055. -
Завтра попробую бенчи прогнать
-
Добрый вечер, кто деплоит через clickhouse-operator, можете пожалуйста поделиться знанием.
При деплое прокидываю LoadBalancer, что бы ходить со внешки, но получаю рефьюз либо таймаут
ямл с кликом
...
users:
dev/password: 1234
dev/networks/ip:
- "::/0"
...
clickhouse стартует, но в логах отдает
2021.08.23 17:46:31.379553 [ 53 ] {} <Warning> Application: Listen [0.0.0.0]:8123 failed: Poco::Exception. Code: 1000, e.code() = 98, e.displayText() = Net Exception: Address already in use: 0.0.0.0:8123 (version 21.7.8.58 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
смотрю на ноде netstat -ntulp порты не заняты
кто может плз подсказать в какую сторону думать, буду очень признателен
upd:
хм, теперь телнет на 8123 и 9000 не рефьюзит, но говорит следующее
2021.08.23 18:30:24.973642 [ 58 ] {} <Error> Access(user directories): dev: Authentication failed: Code: 195, e.displayText() = DB::Exception: Connections from ::ffff:1.2.3.4 are not allowed, Stack trace (when copying this message, always include the lines below): -
это вообще не та настройка.
dev/networks/ip: --- это с какого адреса пускать пользователя dev (access restriction)
>Listen [0.0.0.0]:8123 failed: Poco::Exception
это listen_host -- какой адрес слушать, вообще другой конфиг -
clickhouse-operator/clickhouse-operator-install.yaml at master · Altinity/clickhouse-operator
The ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes - clickhouse-operator/clickhouse-operator-install.yaml at master · Altinity/clickhouse-operator
-
сорян, поставил user/networkds/ip: "::/0"
все прокнуло
благодарю за инфу -
а это на каком железе вы меряли?
-
слабенький тестовый AMD Ryzen 7 3700X 8-Core Processor
-
сейчас нормальный найду
-
хотя небольшая разница
model name : Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz
clickhouse-benchmark -c 50 <<< 'select 1'
localhost:9000, queries 15780, QPS: 15847.346, RPS: 15847.346, MiB/s: 0.015, result RPS: 15847.346, result MiB/s: 0.015.
clickhouse-benchmark -c 50 <<< 'select avg(number) from numbers(1000000)'
localhost:9000, queries 8026, QPS: 8066.815, RPS: 8454667658.731, MiB/s: 64503.995, result RPS: 8066.815, result MiB/s: 0.062. -
Было бы интересно повторить ClickHouse in the storm на более менее современном железе.
-
Такой результат для 2xXeon(R) Gold 5220 CPU @ 2.20GHz выглядит слабовато?
-c 50 <<< 'select 1'
0.0.0.0:9000, queries 72837, QPS: 20246.914, RPS: 20246.914, MiB/s: 0.019, result RPS: 20246.914, result MiB/s: 0.019.
-c 50 <<< 'select avg(number) from numbers(1000000)'
0.0.0.0:9000, queries 66016, QPS: 16684.659, RPS: 17486857380.115, MiB/s: 133414.134, result RPS: 16684.659, result MiB/s: 0.127. -
нормально.
топикстартер жаловался на "Получили 166 QPS"
я подозреваю он померял скорость клиента или сети или чего-то такого -
тут давеча ментейнер JDBC драйвера например добавил мегатормоза в JDBC, такие что JDBC некоторые запросы дольше в 10 раз обрабатывает чем КХ.
-
Hi, new to clickhouse.
MinMax index does not seem to be working.
Index: INDEX destAddrIdx destAddr TYPE minmax GRANULARITY 1
query: select * from DeliveryReport where destAddr = 917598341783;
logs: MinMax index condition: unknown | ru -
Translated from en - English to ru - Russian
Привет, новичок в Clickhouse.
Индекс MinMax не работает.
Индекс: ИНДЕКС destAddrIdx destAddr TYPE minmax GRANULARITY 1
запрос: выберите * из DeliveryReport, где destAddr = 917598341783;
журналы: MinMax index условие: неизвестно
Translated with ❤️ by @lang_translate_bot -
en chat https://t.me/clickhouse_enClickHouse
ClickHouse DBMS discuss and help
-
@den_crane thanks
- 24 August 2021 (112 messages)
-
queries 28695, QPS: 642.262, RPS: 642.262, MiB/s: 0.001, result RPS: 642.262, result MiB/s: 0.001 b иqueries 42447, QPS: 604.464, RPS: 633527009.535, MiB/s: 4833.428, result RPS: 604.464, result MiB/s: 0.005 соответственно. 2 проца 12 гигов оперативы, в вашем операторе в кубе в облаке Гугла.
-
Спасибо
-
всем привет
-
по какой причине TRUNCATE может зависать на небольших таблицах и приводить к лагу репликации?
-
Есть ли какие-нибудь методы решения этой проблемы?
-
что означает [ON CLUSTER cluster] в параметрах команды TRUNCATE он в документации не описан
-
Думаю, то же, что и везде: https://clickhouse.tech/docs/ru/sql-reference/distributed-ddl/. Странно, что TRUNCATE здесь не указан.Распределенные DDL запросы | Документация ClickHouse
Распределенные DDL запросы (секция ON CLUSTER) Запросы CREATE, DROP, ALTER, RENAME поддерживают возможность распределенн
-
Всем привет. Подскажите, пожалуйста, куда копать. Таблица перешла в readonly.
SYSTEM RESTART REPLICA ... виснет и уходит в бэкграунд
Достал ошибки репликации:
select * from system.replication_queue where table = '...' and lower(last_exception) != '' order by create_time desc limit 50 format Vertical
Много ошибок вида Part 0abfb0bf7739c91f2426b4124148ad81_20919_20944_3_20945 is covered by 0abfb0bf7739c91f2426b4124148ad81_20919_21005_10_21007 but should be merged into 0abfb0bf7739c91f2426b4124148ad81_20878_20949_4_20945. This shouldn't happen often.
есть такие
Not executing log entry queue-0010600298 of type MERGE_PARTS for part d7319f096c4228ac6cc7eb97dbd1f45f_13720_13773_4_13771 because part d7319f096c4228ac6cc7eb97dbd1f45f_13770_13770_0_13771 is not ready yet (log entry for that part is being processed). -
truncate и без указания on cluster чистит таблицу на всех репликах
-
Коллеги, помогите с непоняткой. Есть необходимость видеть сервер clickhоuse c другой машины. Убираю в конфиге комментарии со стрки < listen_ port》0.0.0.0 《/listen_port》. Доступ с наружи появляется. Но отваливается клиент на той машине, где сервер. Пишет code 210. DB::NetExeption: connection refused (localhost:9000). Восстанавливаю комменты - клиент снова работает. Как дать доступ снаружи и не сломать клиента?
-
Где общаются разработчики/контрибуторы КХ? Есть ли какой-нибудь чат, mailing list, etc?
-
ON Cluster это про шарды, к репликам не относится
-
Ребят, около 5 минут назад упал кликхаус с ошибкой:
Clique *ch_public is not running; actual state = orphaned
Сейчас вроде восстановился, но отрабатывает запросы медленнее. Это что-то плановое было?.. -
вы про яндекс клауд?
-
Что? 😅
Падали запросы с ошибкой, при этом параллельный YQL запрос остался жив. -
вы тут своих админов ищите чтоли?) это такой общий чатик не только для тех кто в яндексе работает)
-
my bad!
-
Всем привет, у меня немного тормозной вопрос: а где можно почитать или посмотреть про перфоманс кликхауса в случае включенного swap (ковыряние сырцов, кажется, для меня не принесло результатов D:)? Конечно понимаю, что swap отключать необходимо, но хотелось бы расширить знания относительно этого в разрезе clickhouse
-
Просто несколько цифр к разговору (benchmark запускается с другого хоста)
1. Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (32 cores inside the container)
-c 100 <<< 'select 1'
QPS: 28541.165, RPS: 28541.165, MiB/s: 0.027, result RPS: 28541.165, result MiB/s: 0.027.
-c 100 <<< 'select avg(number) from numbers(1000000)'
QPS: 8337.994, RPS: 8738884837.366, MiB/s: 66672.400, result RPS: 8337.994, result MiB/s: 0.064.
2. Intel(R) Xeon(R) Silver 4214 CPU @ 2.20GHz (48 cores inside the container)
-c 50 <<< 'select 1'
QPS: 31402.416, RPS: 31402.416, MiB/s: 0.030, result RPS: 31402.416, result MiB/s: 0.030.
-c 50 <<< 'select avg(number) from numbers(1000000)'
QPS: 13614.469, RPS: 14269052290.986, MiB/s: 108864.230, result RPS: 13614.469, result MiB/s: 0.104. -
меня бы эти цифры устроили.Но пока копаем дальше
-
Подскажите можно ли заставить такой запрос выдавать пустой результат?
SELECT 0 AS c, sum(a)
FROM (SELECT arrayJoin([1, 2]) AS a)
WHERE 1 = 0
GROUP BY c
┌─c─┬─sum(a)─┐
│ 0 │ 0 │
└───┴────────┘
Я тут пытаюсь благодаря 1=0 сделать так чтобы результат был всегда пустой, но получаю одну строку с нулями
Без группировки работает как ожидается:
SELECT 0 AS c, a
FROM (SELECT arrayJoin([1, 2]) AS a)
WHERE 1 = 0
Ok.
0 rows in set. Elapsed: 0.005 sec.
Суть - один столбец с константой, второй с агрегатом. Этот запрос потом куда-то ещё джойнится, такой трюк с 1=0 хотелось использовать чтобы не переписывать весь запрос, а выкидывать его части вот таким вот способом с невыполнимым условием -
Коллеги, у меня задача нужно через clickhouse построить simpleLinearRegression на данных, где х - DateTime объект, y - Float. Напрямую это сделать нельзя, подскажите какую-нибудь эвристику, как это реализовать? преобразование вида toUInt64(timestamp) не подходит, числа разного масштаба получаются
-
если в группировке есть группа - в выдаче будет и строка. Не нужна строка в выдаче - фильтруйте константу или сформируйте список нужных вам констант. Да хоть бы и по having, если данных немного.
выкидывать можно и попроще - where 0, а ещё лучше через кастом переменные - https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-parameterized-views -
для этого существует стандартизация, как вариант можно взять некую дату за 0, и расчитать дельту
-
В общем так. Добился методом научного тыка работы и clickhouse клиента и доступа снаружи. Решение - расскоментаривание строки 《listen_host》::《/listen_host》
-
вроде особо не общаются. только на гитхабе разве что
-
Теперь слушает только на ipv6 но доступ снаружи есть и клиент тоже работает. Правда достигнутого результата я не понимаю
-
если бы вы коннектились не на localhost, а на 127.0.0.1, то и правило 0.0.0.0 бы сработало и вопросов бы не возникало
-
Я снаружи пытался цепляться курлом. Не по локалхосту а по реальному адресу
-
2Cpu и 12 ram тут любые цифры могут быть, можно не смотреть в чем проблема. У меня тестовый сервер это 32 ядра и 128 озу.
-
Делаем новые ноды на более производительных CPU отключили сжатие на интересующей нас таблице, т.к 235 Мб превратилось в всего в 1.9 гб
-
Truncate может блокировать мутация или мерж
-
>Но отваливается клиент на той машине, где сервер. Пишет code 210. DB::NetExeption: connection refused (localhost:9000).
чат всё помнит, куда вы коннектились, но не получалось -
Но только на текущем шарде. On cluster запускает truncate на одной реплике каждого шарда
-
Потому что у вас ipv6 есть. Кх клиент ломится по ipv6 а вы его отключили. Вам либо надо :: сделать либо .:: и 0.0.0.0
-
Github и чаты ( Clickhouse developers public)
-
Делал. И то и то. Клиент дает ошибку.
-
А чат где? Тоже на гитхабе?
-
используйте функцию "ответить", а то ваши сообщения вклиниваются ни к месту, у можно глаза сламать пытаяс понять о чём вы вообще
-
-
Спасибо!
-
Не подскажешь права, которые должны быть у пользователя постгреса для репликации? меня ПГ культурно посылает с permission denied for database
-
ну покажите как у вас при :: ошибка
<listen_host>::</listen_host> -
Если только listen host :: то все работает. Если их два listen host :: и listen host 0.0.0.0 то локальный клиент дает ошибку и не запускается
-
Привет, подскажите как правильно сделать внешнюю таблицу, смотрящую на таблицу в другом кластере
что-то типа как для словарей чтобы работало
https://clickhouse.tech/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-clickhouseИсточники внешних словарей | Документация ClickHouseИсточники внешних словарей Внешний словарь можно подключить из множества источников. Общий вид XML-конфигурации: <yandex
-
нельзя ТАКИХ два,
listen host :: и listen host 0.0.0.0, в :: уже входит 0000
что тут непонятного, у вас client ломится по ipv6 у клиента можно либо указать куда ходить -h либо в конфиге клиента поставить -
ни тут
https://clickhouse.tech/docs/ru/engines/table-engines/integrations/
ни тут
https://clickhouse.tech/docs/ru/engines/database-engines/
ничего похожего не нашелДвижки таблиц для интеграции | Документация ClickHouseДвижки таблиц для интеграции Для интеграции с внешними системами ClickHouse предоставляет различные средства, включая дв
-
к сожалению, понятия не имею
-
Ничего себе. Не знал. Спасибо!
-
create table ... as remote
-
Хм, вот не могу найти в доке ничего похожего - максимум это табличная функция, но мне надо именно таблица чтобы была.
И отдельный кластер - это физически отдельный кластер, а не шарда (шард группа ) в рамках общего кластера -
Можете просто описать свой отдельный кластер в <remote_servers> текущего
и Engine=Distributed(кластер,'database','table') -
самое важно понять, что никакого кластера в КХ не существует.
у вас 38 вариантов, в зависимости от того что вы хотите,
самый прямой путь описать в remote_servers еще один кластер с теми другими серверами и создать Distributed таблицы -
Эх, а если у меня КХ в православном ЯО и доступа в файлову систему нет....
Есть варианты ка кто это через sql вкатить? -
create table another as remote('host1|host2,host3|host4,host5|host6',db,table,'user','password');
-
| -- реплики
, -- шарды -
host1|host2 -- две реплики первого шарда,
host3|host4 --две реплики второго шарда, -
добрый день. можно ли как нибудь КХ заставить части UNION-ALL обрабатывать последовательно (непараллельно)?
по одному подзапросы нормально влезают в память, но когда происходит UNION ALL там начинается спиллы из-за max_bytes_before_external_group_by в самих подзапросах.
структура запроса (если поможет) https://controlc.com/ccc0b543SELECT making.methane_NYLON AS "NYLON" , round(making.paste,0).. - ccc0b543SELECT making.methane_NYLON AS "NYLON" , round(making.paste,0) AS "Moderni - ccc0b543
-
спасибо за вариант, пока выхватываю DB::NetException: Unexpected packet from server буду пытать саппорт
-
Привет. Сделал kafka engine, читаю данные и в лога переодически мелькает
Cannot parse JSON string: expected opening quote{}: (while reading the value of key HttpPlayerPlaybackEndEvent.sessionEndCode): While executing SourceFromInputStream
При этом в кафке абсолютно нормальный и валидный json
Как понять в чем проблема? -
Сам спросил сам отвечаю. В текущей версии КХ опция MaterializedPostgreSQL работает только если пользователю ПГ дать Superuser и Replication права. Иначе нихрена не получается
-
-
искать по чату "kafka" - такие вопросы каждый день. менять kafka_format с JsonAsString на JSONEachRow или наоборот или на другой формат, который найдёте в этом чате. если ничё не помогло показываете dll и может кто-нибудь что-нибудь подскажет.
-
база выкачалас в КХ, но вот репликация не работает....."Настройка wal_level должна иметь значение logical, параметр max_replication_slots должен быть равен по меньшей мере 2 в конфигурационном файле в PostgreSQL." - это сделал. В чем может быть затык? function pg_replication_slot_advance does not exist
-
И опять же сам отвечу, что постгрес должен быть не старше 11-го, ибо pg_replication_slot_advance есть только с 11 версии. Может кому пригодится, кто пойдет моим путем, а так неплохо бы добавить в доки: 1 - пользователь PG должен обладать Superuser, Replication, 2- PG должен быть не старше 11 версии. Можно кстати сразу проверять версию ПГ и посылать со старой версией. Теперь мне надо как-то обосновывать переезд 2 продов, 2 пг реплик, дева, стэйджинга и дров всех клиентов на 11....а щастье было так близко...
-
Так может по старинке CDC (Debezium) + Kafka
-
Подскажите такой момент. 32 Приложение PHP подключается к КХ по http протоколу, но по факту я вижу только 4-5 коннектов. Насколько это нормальное поведение КХ? в логах приложений ошибок нет
-
ну я уже настроился КХ все же погонять, он красавчик. Первичная репликация все-таки прошла, я тесты погонял - это реально такая скорость, какую хочется иметь. Остался последний шаг, но на 10 пг не получится никак, разве что кафку посередине сУвать, но это как-то некрасиво
-
-
Ну CDC (Debezium) + Kafka > clickhouse это уже опробовано на практике
-
А с MaterializedPostgresql пока такого опыта нет, могут быть всякие особенности
-
с этим согласен. Отлавливать можно долго эти "особенности". Действительно надо подумать...ПГ на продах обновлять, драйвера у клиентов могут отвалиться....
-
Изменение нод, добавление процов и памяти подняло QPS до 1150 для select 1
-
есть где почитать о настройке такой связки или RTFM? Много ручной работы? Проектировать БД понадобится? Тут-то раз-раз и в дамки.
-
-
Привет! Подскажите, пожалуйста, нормально ли использовать после из SimpleAggregateFunction() в partition by для AggregatingMergeTree и не будет ли проблем с этим.
Пример:
CREATE TABLE IF NOT EXISTS table
(
month SimpleAggregateFunction(any, UInt32),
a FixedString(10),
b String,
c SimpleAggregateFunction(max, UInt16)
)
ENGINE = AggregatingMergeTree()
PARTITION BY (month)
ORDER BY (a, b);
month используется для PARTITION BY -
из php по http соединения не держатся. запрос отработал. соединение закрылось
-
безсмысленно и безпощадно. лучше так не делать
-
а чем чревато? Оно вроде работает) Ну т.е. каунты совпадают после optimize final
-
записи не будут схлопываться, потому что в разных партициях. но при этом ddl говорит о том что они как бы должны. человек, который будет поддерживать это после вас полдня будет ходить в недоумении зачем так надо было делать
-
Добрый вечер!
Обновление словаря на отдельной ноде укладывается в миллисекунды (SYSTEM RELOAD DICTIONARY db.table), а обновление словаря на кластере (SYSTEM RELOAD DICTIONARY ON CLUSTER ch_cluster db.table) длится более 15 минут.
Насколько в целом такое поведение корректно, с чем оно связано, и можно ли как-то ускорить обновление словарей в рамках кластера? -
ну вот я тестирую и вижу, что схлопывается. Подскажете может как краевой кейс найти?
-
данные за разные месяцы не схлопнуться после оптимайза, но если в селекте добавить FINAL, то схлопнуться.
-
но ведь в разные патриции не разлетятся данные с одинаковым month?
-
нет. но при SELECT FINAL данные не будут разбиты по месяцам, они будут за весь период
-
Но по факту они должны открыть 32 коннекта, а не 3-4
-
я скорее оперирую данными помесячно. Т.е. фильтрую месяц конкретный. И до этого делаю opmimize final на соотвествюущую партицию
-
тогда тем более не надо делать такой костыль, чтобы потом не выстрелить себе в ногу в совершенно неожиданном месте
-
я вставляю данные на ежедневной основе. А optimize делаю в конце месяца. Как сделать партиции по-другому?
-
ну их может и открыло 32, а активных одновременно - только 3-4, а остальные закрылись
-
month SimpleAggregateFunction(any, UInt32) -> month UInt32,
-
но каждый день будет вставляться строка с однаковым month. C этим проблем не будет?
-
если вставите month в order by, то не будет. у вас же вставляются вставляться строки с одинаковым a и b, но с этим же проблем нету.
-
да, я что-то уже затуннелился. Спасибо!
-
Up
-
Всем привет, подскажите, ошибка "Coordination::Exception: Connection loss." в system.replication_queue лечится как-то, кроме рестарта нод?
-
Статья Testing the Performance of ClickHouse
https://clickhouse.tech/blog/en/2021/performance-test-1/Testing the Performance of ClickHouseOne of the main selling points of ClickHouse is that it's very fast, in many cases utilizing the hardware up to the theo
-
None
-
Подскажите, пожалуйста, как посмотреть как формируется view в кх?
-
DESCRIBE | Документация ClickHouse
DESCRIBE TABLE Statement DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format] Возвращает описание стол
-
Show create ...
-
спасибо)
-
Ничоси
-
Всем привет!
Как понял если в M View делать join таблици на саму себя, по факту он делается только на вставляемый батч, есть ли способ обойти это поведение? -
join в MV это верный путь к суициду
-
-
-
Если вставка редкая, то и так сойдёт :)
-
Да, насколько понял это правильно через AggregateFunction было делать, но завтра демо прототипа, а у меня вставки как надо не работают(
-
Возможно если создать вьюху и заджойнить её вместо самой таблицы, то всё будет гуд
-
Спасибо, попробую завтра как временное решение
-
слева всегда будет только вставляемый буфер, а не таблица
- 25 August 2021 (117 messages)
-
Даже со вью как советуют выше?
-
MAtView следит за таблицей, за инсертами в эту таблицу. И получает буфер от инсерта. Первое упоминание во FROM это та самая таблица, тот самый буфер.
Если первое упоминание во FROM это какая-то хрень, то MAtView будет следить за инсертами в эту хрень, если вставок туда нет, то MAtView не будет триггерится. -
Вставка в таблицу идет. В моем случае получается примерно так:
CREATE MAT VIEW ...
SELECT .. FROM log (буфер от инсерта)
LEFT JOIN log (буфер от инсерта)
Мне же нужно:
CREATE MAT VIEW ...
SELECT .. FROM log (буфер от инсерта)
LEFT JOIN log (оригинальная таблица) -
Matview не работает с таблицей он работает с инсерт блоками
Какое у вас условие join?
Если что в clickhouse все join только equal
Если в одном блоке инсерт нет записей которые join между собой
То можео пробовать делать второй mat view куда складывать данные из таблицы
Которые потом надо join в первом матвью -
Привествую, с помощью чего можно посчитать время между ивентами в кликхаусе ?
-
Оконные функции?
-
Можете код как это выглядит
-
В таком кейсе юзали массивы. Загоняли все event_datetime и event_name в arrayZIP и дальше двигали первую часть массива через arrayPopBack , arrayPushfront
-
Наладил доступ к clickhouse по rest. Работает! Прикольно.
-
Я тоже начал делать через массивы, я сделал груп бай по сессии. И я не понимаю как подсчитать несколько вхождений ивентов в одной сессии
-
-
Ребята, всем привет. подскажите пожалуйста правильный путь, когда нужно у таблицы изменить партицирование и ключ сортировки, чтобы были затронуты также все старые данные. заранее большое спасибо
-
-
Как вариант: tmp таблица -> переливка в нее данных ->дроп старой -> создание аналога старой с тем же именем но новой структурой -> переливка данных из tmp в аналог -> дроп tmp
-
Спасибо, попробую, но пока без понятие что с этим делать :)
-
Не пропустите онлайн ClickHouse митап сегодня поздно вечером по Москве . Будет два доклада, включая первое публичное обсуждение замены Зукипера — ClickHouse Keeper. https://www.meetup.com/San-Francisco-Bay-Area-ClickHouse-Meetup/events/279109379/ClickHouse August [Virtual] Meetup
Wed, Aug 25, 2021, 12:00 PM: Hello ClickHouse Fans,Welcome to the August 2021 ClickHouse Meetup! We have the following great talks lined up.* Building an observability platform with Clickhouse as stor
-
Спасибо!
-
да спасибо, сейчас примерно таким путем и смотрим идти. а переливку простым запросом можно выполнять или есть какие то другие возможности?
-
Так группировать все, далее в массив groupArray(event_datetime) m1, arrayPushfront (arrayPopBack (m1))) m2, arrayZip(m1,m2)
-
Проще чем insert into select * кажется нет д
-
Привет, всем.
ПОднял кластер зукипера, прописал конфиг зукипера, но таблицы system.zookeeper нет в клике. Зукипер-узлы доступны, в логах зукипера и кликхауса записей по обращениям к зукиперу не нашел. Гугл молчит, куда копать?
Делал всё по гайду https://docs.altinity.com/operationsguide/clickhouse-zookeeper/zookeeper-installation/ и приложенным внутри ссылкамZooKeeper Installation and ConfigurationHow to configure Zookeeper to work best with ClickHouse
-
Подскажите в чем может быть проблема,
поставил на поиграться Clickhouse из последнего docker образа, папку /var/lib/clickhouse/store/ подключил, как внешний том. Все работает отлично, но SQL запрос вида
drop table db1.table1
выдает следующую ошибку:
SQL Error [1002]: ClickHouse exception, code: 1002, host: ..., port: ...; std::exception. Code: 1001, type: std::__1::__fs::filesystem::filesystem_error, e.what() = filesystem error: in rename: Invalid cross-device link [/var/lib/clickhouse/store/96d/96d35dca-a864-4e3f-96d3-5dcaa8643e3f/table1.sql] [/var/lib/clickhouse/metadata_dropped/db1.table1.0d4bc422-30a2-446a-8d4b-c42230a2546a.sql]
Cannot print extra info for Poco::Exception (version 21.8.4.51 (official build))
запросы на создание/изменение таблиц работает, а с удалением не пойму что не так. Подскажите в чем может быть проблема? -
Неактуально. Таблица появилась после создания replicatedmergetree таблицы
-
Привет!
Архитектурный вопрос к увожаемому сообществу, на много буков, сломал всю голову уже.
Есть одиночный сервер с базой Clickhouse, в которую интенсивно летят данные от сервисов. Сервер достаточно высоко нагружен (помимо Clickhouse на нем же крутятся сами сервисы), и свободных вычислительных ресурсов на нём практически нет.
Появилась необходимость организовать актуальную копию одной таблицы из этой базы на другой свежеразвернутый сервер Clickhouse, чтобы иметь возможность делать по этим данным разного рода интенсивные запросы, чтобы не добивать нагрузкой основной сервер.
ТЗ:
* в копию таблицы должны поступать актуальные данные из исходной таблицы, но при этом небольшое отставание (вплоть до нескольких минут) - допустимо
* у копии таблицы должны отличаться параметры ORDER BY (по иным колонкам, чем на исходной таблице) и SETTINGS index_granularity (более разреженный, чем на исходной таблице)
* в копии таблицы данные должны храниться меньше, чем в исходной таблице (2 суток в копии, против нескольких недель в исходной таблице)
Вопрос: вот это вот всё можно реализовать, используя нативную репликацию Clickhouse (ReplicatedMergeTree, и т.п.)?
Или с таким ТЗ репликация - это вообще не то что нужно, и проще/надежнее будет сделать просто обычную таблицу на втором сервере, и просто переливать в нее данные из основной таблицы "руками" (в смысле - скриптом/приложением/SQL запросами)? -
Привет! Есть ли сбособ выгрузить команды создания всех таблиц и представлений?
-
Мне кажется проще сделать скрипт который сначала возьмет show tables
а потом сделает show create table %tablename% -
ну выборка из словаря проще скрипта обыно )
-
select * from system.tables
-
спасибо!
-
Всем привет. Что-то не получается подключится к свежей установке кх, все listen_host указаны
<listen_host>::</listen_host> <listen_host>::1</listen_host> <listen_host>127.0.0.1</listen_host>
Выдаёт:
clickhouse-client --host=127.0.0.1 --user default --password default
ClickHouse client version 21.8.4.51 (official build). Connecting to 127.0.0.1:9000 as user default. Code: 210. DB::NetException: Connection refused (127.0.0.1:9000)
Подскажите пожалуйста в чем может быть проблема? -
Всем привет.
Ребят, а кто складывает sflow в CH, можете подсказать правильный селект что бы посчитать трафик по определенному SrcAddr ?
Пробую таким вот запросом сделать график, но у меня почему то вместо потока в 0.5 Gbps на графике показывает 3 Gbps
SELECT
toUInt64(toStartOfMinute(TimeFlowStart))*1000 as t,
sum(Bytes*SamplingRate) as sumbytes
FROM default.flows_raw
WHERE Date >= toDate(1629875189) AND Date <= toDate(1629878789) AND TimeFlowStart >= toDateTime(1629875189) AND TimeFlowStart <= toDateTime(1629878789) AND IPv4NumToString(reinterpretAsUInt32(substring(reverse(SrcAddr), 13,4))) LIKE '1.1.1.1'
GROUP BY t
ORDER BY t -
Юзаем replicatedmergetree с заливкой через buffer - нормально работает. По условиям ТЗ я бы наверно через materialized view делал.
-
ребят, подскажите есть ли какая нибудь возможность в CH 20.8.2.3 эмулировать работу функции аналитического каунта?
-
-
Странно что кликхаус из коробки не заводится, сначала два юзера default с паролем и без, теперь это
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x8f9557a in /usr/bin/clickhouse 1. DB::MergeTreeDataMergerMutator::mergePartsToTemporaryPart(DB::FutureMergedMutatedPart const&, std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, DB::BackgroundProcessListEntry<DB::MergeL> 2. DB::StorageMergeTree::mergeSelectedParts(std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, bool, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::all> 3. ? @ 0x10ed5bd7 in /usr/bin/clickhouse 4. ? @ 0x10c1c9f7 in /usr/bin/clickhouse 5. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x8fd8f18 in /usr/bin/clickhouse 6. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()>(void&&, voi> 7. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x8fd61ff in /usr/bin/clickhouse 8. ? @ 0x8fd9ae3 in /usr/bin/clickhouse 9. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so 10. __clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so (version 21.8.4.51 (official build)) 2021.08.25 11:56:33.008272 [ 52622 ] {} <Error> Application: DB::Exception: Listen [::1]:8123 failed: Poco::Exception. Code: 1000, e.code() = 98, e.displayText() = Net Exception: Address already in use:> 2021.08.25 11:57:04.466303 [ 52768 ] {} <Error> Application: DB::Exception: Listen [::1]:8123 failed: Poco::Exception. Code: 1000, e.code() = 98, e.displayText() = Net Exception: Address already in use:> 2021.08.25 11:57:35.964704 [ 52915 ] {} <Error> Application: DB::Exception: Listen [::1]:8123 failed: Poco::Exception. Code: 1000, e.code() = 98, e.displayText() = Net Exception: Address already in use:> -
у вас порт занят
-
Привет еще раз!
Как безопасно удалить реплику из system.replicas?
C зукипера удалил -
sudo lsof -i :8123 ничего не показывает
-
Где тут агрегация вообще? Почему такая ошибка может возникать, есть в параметр подставить '00000000-0000-0000-0000-000000000000'?
Как в КХ опциональные фильтры правильно делать? -
А если заменить 8123 на 8124 то и он занят будет. Удивительно, что конфиг стабильной версии не даёт запустит КХ
-
Привет.
А есть какие либо best practice что делать с ON CLUSTER DDL во время maintaince части реплик в кластере?
Все такие запросы будут валиться с timeout покуда есть хоть 1 недоступная нода -
кажется что страдатб и ждатб
-
Есть Replicated движок баз данных, но он пока экспериментальный
https://clickhouse.tech/docs/en/engines/database-engines/replicated/Replicated | ClickHouse Documentation[experimental] Replicated The engine is based on the Atomic engine. It supports replication of metadata via DDL log bein
-
ReplicationMergeTree != Replicated ?
-
ReplicatedMergeTree - это движок таблицы
А Replicated - движок базы 🙂 -
Ого сколько всего появилось, пойду читать, спасибо!
-
Интересно, как это будет совмещаться с заменой ЗК. Должен быть строго один ЗК ансамбль (или его замена) на весь кластер.
-
я бы подключил новый сервер как шард (<remote_servers>, remote() table function, etc), сделал на старом сервере remote таблицу смотряющую на новую таблицу, и через MV писал в нее все что хочется видеть, может быть даже с какой-то обработкой .
-
Здравствуйте. Помогите с такой проблемой:
Есть следующий сетап ролей, пользователй и прав:
user <- common_role <- specific_role <- GRANT INSERT, ALTER UPDATE, ALTER DELETE, CREATE
TABLE, CREATE VIEW, DROP TABLE, DROP VIEW ON db.* TO specific_role;
Добавляю новую роль по типу specific_role на другую базу данных. И от юзера пытаюсь созадть вью в этой базе - говорит что нету привелегий. Но если подождать полчаса - час, то начинает срабатывать. Возможно кто-то что то делат с инстансем в это время, не ввсегда могу сказать т.к. много людей с ним работают.
Почему привелегии могут не добаввлятья сразу?
Версия: 21.6.5.37 -
- попробуйте поиск по чату например по #listen_host или по тексту вашей ошибки, чтобы найти сообщения от новичков и ответы как пофиксить
- посмотрите в конфиге порты в секции tcp_port и http_port, а потом с помощью команды netstat -tulpn посмотрите не заняты ли эти порты -
-
Добрый день)
Кто-нибудь собирает метрики через Prometheus (v2.29.1)?
После обновления до 21.8.4.51, Prometheus ругается:
invalid metric type "e65499e54eb6 gauge"
Эндпоинт отдаёт такое:
# TYPE ClickHouseAsyncMetrics_NetworkSendDrop_br-e65499e54eb6
gauge
ClickHouseAsyncMetrics_NetworkSendDrop_br-e65499e54eb6 0 -
известная проблема
https://github.com/ClickHouse/ClickHouse/issues/27799AsyncMetrics are not in Prometheus format · Issue #27799 · ClickHouse/ClickHouseDescribe the issue We've updated from 21.3.4.25 to 21.8.3.44 and Prometheus metrics are broken now. According to official Prometheus documentation, The metric name specifies the general fea...
-
оу, спасибо
-
Спасибо, нашел! Действительно оставить надо было только <listen_host>::</listen_host>
-
Подскажите пожалуйста, правильно ли делаю с точки зрения архитекторы. Есть кластер из двух машин и таблица с движком ReplicatedMergeeTree. Предполагается большое количество инсертов в эту таблицу. Для этого хотел создать буферную таблицу перед реплицированной. Но вопрос как правильно это сделать с точки зрения кластера?
Пока есть только мысль создать по одной буферной таблице на каждой ноде кластера. Правильно ли я делаю?
Две буферные таблицы на разных нодах не будут никак связаны друг с другом. Если одна нода Клика падает, то я лишь теряю данные, хранящиеся в памяти одной буферной таблицы и продолжаю лить данные в буферную таблицу другой ноды -
https://clickhouse.tech/docs/ru/engines/table-engines/special/buffer/, там есть момент
Если таблица назначения является реплицируемой, то при записи в таблицу Buffer будут потеряны некоторые ожидаемые свойства реплицируемых таблиц. Из-за произвольного изменения порядка строк и размеров блоков данных, перестаёт работать дедупликация данных, в результате чего исчезает возможность надёжной exactly once записи в реплицируемые таблицы.Buffer | Документация ClickHouseBuffer Буферизует записываемые данные в оперативке, периодически сбрасывая их в другую таблицу. При чтении, производится
-
Всем привет
Как законвертить след строку в число?
select
'9.56898105924598E+017' as s,
toUInt64(s)
--toUInt64(replace(s,'.',','))
DB::Exception: Cannot parse string '9.56898105924598E+017' as UInt64: syntax error at position 1 (parsed just '9'). -
Ну так оно же не UInt
это же toDecimal128 как минимум
select
'9.56898105924598E+017' as s,
toDecimal128(s,1)
проссто E+017 это не мало =) -
drop table надо было сделать
-
Привет! А есть какая-либо рабочая конфигурация для компиляции последних версий ClickHouse с отключенными инструкциями SSE 4.2?
Сейчас возникает ошибка при сборке версии v21.9.1.7770-prestable :
[1207/9714] Building CXX object contrib/libmetrohash/CMakeFiles/metrohash.dir/src/metrohash128crc.cpp.o
FAILED: contrib/libmetrohash/CMakeFiles/metrohash.dir/src/metrohash128crc.cpp.o
prlimit --as=10000000000 --data=5000000000 --cpu=600 /usr/bin/ccache /usr/bin/clang++-11 -DSTD_EXCEPTION_HAS_STACK_TRACE=1 -I../contrib/sentry-native/include -I../contrib/libmetrohash/src -I../base/glibc-compatibility/memcpy -isystem ../contrib/libcxx/include -isystem ../contrib/libcxxabi/include -isystem ../contrib/libunwind/include -isystem ../contrib/libc-headers/x86_64-linux-gnu -isystem ../contrib/libc-headers -g -O2 -fdebug-prefix-map=/build/ClickHouse=. -specs=/usr/share/dpkg/no-pie-compile.specs -Wdate-time -fdiagnostics-color=always -fsized-deallocation -gdwarf-aranges -pipe -fasynchronous-unwind-tables -falign-functions=32 -Wall -Wno-unused-command-line-argument -fdiagnostics-absolute-paths -fexperimental-new-pass-manager -Werror -w -O2 -g -DNDEBUG -O3 -flto=thin -fno-pie -D OS_LINUX -nostdinc++ -std=gnu++2a -MD -MT contrib/libmetrohash/CMakeFiles/metrohash.dir/src/metrohash128crc.cpp.o -MF contrib/libmetrohash/CMakeFiles/metrohash.dir/src/metrohash128crc.cpp.o.d -o contrib/libmetrohash/CMakeFiles/metrohash.dir/src/metrohash128crc.cpp.o -c ../contrib/libmetrohash/src/metrohash128crc.cpp
/build/ClickHouse/contrib/libmetrohash/src/metrohash128crc.cpp:46:21: error: always_inline function '\''_mm_crc32_u64'\'' requires target feature '\''sse4.2'\'', but would be inlined into function '\''metrohash128crc_1'\'' that is compiled without support for '\''sse4.2'\''
v[0] ^= _mm_crc32_u64(v[0], read_u64(ptr)); ptr += 8;
Пробовал с clang-11, clang-10. Пока пробую последовательно понижать версию clang, но может есть известный работающий способ? -
😂 спасибо
-
Здравствуйте. Подскажите пожалуйста как в логе может встречаться таблица, которой фактически нет (она была переименована и обращений по старому имени нет) ?
-
может быть , путь в Зукипере ?
-
проверила, нет к сожалению
-
какой лог имеется ввиду?
clickhouse-server.log?
покажите сообщение? в каком контексте упоминается таблица?
если у вас Atomic database engine
то там таблица не сразу удаляется надо удалять через DROP TABLE db.table_name SYNC -
-
это не баг, это фича
-
я тут имени таблицы даже не вижу =)
-
это и не надо, так как схему тоже не видно
-
у меня тут начал жутко тормозить clickhouse-client, запускался долго долго, запросы не выполнял нормально, подвисая даже на desc table; я долго искал, и нашел что история запросов кх в файлике в хомяке выросла до 187мб.... если у кого такие проблемы, возьмите на заметку
-
но если бы таблица не удалилась, то она должна быть видна в списке таблиц, а ее нет . Или я ошибаюсь?
-
Спасибо, принял
-
Спасибо, услышал.
Просто сервис, который пишет в таблицу на старом сервере - затруднительно переработать, насколько я знаю. Он вроде как легаси, и никто его трогать не хочет.
Поэтому задача в том числе без вмешательства в работу старого сервера это сделать. -
так вы и не будете вмешиваться в него особо. можно создать указанную remote таблицу и MV в отдельной базе данных - это немного абстрагирует и может кого-то успокоит.
Если же есть жесткое требование делать чисто на клиенте, без MV, то придется поллить исходную таблицу раз в минуту, сохранять позицию (например какой-то таймстемп), и писать добытые данные на новый сервер. Нагрузка чуть выше, работает чуть медленнее, зато не трогает легаси. -
Спасибо еще раз за идеи, обдумаем...
Нет, требование не жесткое, тут скорее "а вот как бы нам проще/лучше сделать, не городя огород из ненужных костылей", чтобы это было просто обслуживать, поддерживать.
Поэтому и пришел спросить тут, кто как подобное бы реализовал из опыта. -
Atomic расчитан на то, что вы когда удаляете таблицу через DROP TABLE
еще могут идти какие то SELECT
и соответсвенно чтобы не блокировать удаление или не отменять SELECT
поступают хитро
данные на диске физически еще 480 секунд живут...
и соответсвенно если были какие то SELECT то они завершаются без всяких ошибок...
а в system.tables таблицы уже нет
покажите результат запроса
SELECT name, engine FROM system.databases? -
default,Ordinary
-
Доброго дня! Подскажите пожалуйста как объяснить такое поведение функции decrypt:
CREATE TABLE t (
xxxx Nullable(String),
iviv Nullable(String)
) ENGINE = MergeTree() ORDER BY tuple();
INSERT INTO t VALUES (null, null);
запросы работаеют как ожидается:
SELECT decrypt('aes-256-gcm', NULL, '12345678901234567890123456789012', NULL) FROM t;
SELECT decrypt('aes-256-gcm', xxxx, '12345678901234567890123456789012', NULL) FROM t;
SELECT decrypt('aes-256-gcm', NULL, '12345678901234567890123456789012', iviv) FROM t;
а такой падает:
SELECT decrypt('aes-256-gcm', xxxx, '12345678901234567890123456789012', iviv) FROM t;
DB::Exception: Encrypted data is smaller than the size of additional data for AEAD mode, cannot decrypt.: while executing 'FUNCTION decrypt('aes-256-gcm' :: 2, xxxx :: 0, '12345678901234567890123456789012' :: 3, iviv :: 1) -> decrypt('aes-256-gcm', xxxx, '12345678901234567890123456789012', iviv) String : 4’.
Версия сервера 21.3.15 -
Каннот он систем енджин
-
replicatedMergeTree удалять надо, а не system.replicas
-
Не создалось ничего
-
Я хотел создать таблицу, началась активность с зукипером, но упало таймаутом. Таблицы нет, а запись о реплике естт
-
тогда в двойне странно =)
но на скриншоте я вообще никакой таблицы не видел там какие то куски того что кто-то какой то запрос запускает... -
таблица не была удалена, она была переименована
-
а есть где-то дока про это?
-
-
я сначала подумала что это шутка, про не баг, а фича
-
спасибо всем большое!
-
про многопоточную запись в логи? ну, надо понять как файловый ввод вывод работает.... и что такое треды =)
-
нет, про то что переименовал таблицу, а в логах она далеко не 10 минут будет со старым именем
-
до следующего рестарта
-
-
благодарю)
-
смайлика не было 🙂
-
всю папку надо /var/lib/clickhouse
store это не то что вы подумали -
пароля нет. --password не нужен
>Connection refused
CH не запущен (не запустился) service clickhouse-server status -
8 бит в байте ? на 8 надо поделить?
-
да, на массивах
-
Есть какой-нибудь пример? Буду признателен :)
-
ради теста? в смысле для CI ?
-
числа от 0 до 9, разбиты на 3 группы
select number x, number%3 g from numbers(10);
┌─x─┬─g─┐
│ 0 │ 0 │
│ 1 │ 1 │
│ 2 │ 2 │
│ 3 │ 0 │
│ 4 │ 1 │
│ 5 │ 2 │
│ 6 │ 0 │
│ 7 │ 1 │
│ 8 │ 2 │
│ 9 │ 0 │
└───┴───┘ -
посчитаем count в группе
select g, arrayJoin(gx) x, cnt from (select g, groupArray(x) gx, count() cnt from (select number x, number%3 g from numbers(10)) group by g) ;
┌─g─┬─x─┬─cnt─┐
│ 0 │ 0 │ 4 │
│ 0 │ 3 │ 4 │
│ 0 │ 6 │ 4 │
│ 0 │ 9 │ 4 │
│ 1 │ 1 │ 3 │
│ 1 │ 4 │ 3 │
│ 1 │ 7 │ 3 │
│ 2 │ 2 │ 3 │
│ 2 │ 5 │ 3 │
│ 2 │ 8 │ 3 │
└───┴───┴─────┘ -
Спасибо большое❤️
-
вот так, более похоже на исходную сортировку
select arrayJoin(gx) x,g , cnt from (select g, groupArray(x) gx, count() cnt from (select number x, number%3 g from numbers(10)) group by g) order by x ;
┌─x─┬─g─┬─cnt─┐
│ 0 │ 0 │ 4 │
│ 1 │ 1 │ 3 │
│ 2 │ 2 │ 3 │
│ 3 │ 0 │ 4 │
│ 4 │ 1 │ 3 │
│ 5 │ 2 │ 3 │
│ 6 │ 0 │ 4 │
│ 7 │ 1 │ 3 │
│ 8 │ 2 │ 3 │
│ 9 │ 0 │ 4 │
└───┴───┴─────┘ -
Мониторинг проверить
-
attach table none(A Int64) Engine=ReplicatedMergeTree('/sdfsdfsdfdsfd', '1') order by tuple();
select is_readonly from system.replicas where table = 'none';
┌─is_readonly─┐
│ 1 │
└─────────────┘ -
drop table none;
-
-
ничего не сделать, есть несколько FR в гитхабе чтобы не падать если N нод недоступно, но НЕ имплементированы и Яндекс команда не хочет такого
-
на самом деле один ЗК и будет.
У 25% пользователей КХ таблицы дименшины реплицированы на все ноды (один шард). Поэтому нельзя сделать по keeper-у на шард.
мы в Альтинити тоже всем клиентам впариваем такой патерн. -
Можно запускать кипер как сайд-кар контейнер, и таким образом иметь по “ансамблю” на шард, если не использовать ON CLUSTER и т.п.
-
я же говорю у части таблиц один шард на всех нодах
-
В нашем деплойменте мы используем по два ЗК на региональный кластер, чтобы не создавать узких мест. Логическое развитие, это иметь консенсус в пределах шарда.
-
Я понимаю.
-
Доброй ночи. Вопрос про первичные ключи. Есть таблица ReplicatedMT. В ней задан ключ сортировки по которому данные будут заменяться.
Наиболее частые поиски идут по полю вне ключа сортировки.
Я так понимаю первичный ключ должен включать в себя все поля сортировки, но если я укажу это поле в конце первичного ключа, то оптимизации поиска не будет? -
ReplicatedMT? Replacing имелось в виду?
У вас особого выхода нет, если вы включите их в ключ то заменятся-то не будут. - 26 August 2021 (121 messages)
-
Добрый день!
Столкнулись с дилеммой во время разработки.
Есть некоторые сущности, для которых можно:
1) создавать отдельно для каждой таблицу, писать в эту таблицу данные, делать по ним выборку и удалять данные путем простого дропа таблицы;
2) создать одну таблицу для всех этих сущностей, где будут хранится данные относящиеся к версиям этих сущностей.
Основная проблема это место на диске и быстрая выборка данных.
Дело в том, что сущностей может быть много > 500, и, насколько я понимаю из докладов на митапах, это не самое лучшее решение, так как будет деградировать вставка, а вставка тоже должна быть достаточно быстрой.
Если же делать все в одной таблице, то тогда данные будут весьма быстро "устаревать" в смысле бизнес логики -- старые версии сущностей ни коим образом уже не влияют на дальнейшую обработку данных; в итоге получается такая разряженная в смысле "полезных" и "бесполезнах" данных таблица из которой трудно удалять по TTL. Партиции делать на версии тоже как-то не совсем выгодно так как их будет слишком много.
Резюмирая выше описанное: делать много таблиц на каждый тип сущности или делать одну "прореженную" таблицу протухшими данными. Как остаться в рамках идиомы "кликхаус не тормозит"? -
Важное уточнение: в таблицы пишется много данных с каким-то своими уникальными ключами
Здесь и далее key_time представлен лишь для того, чтобы было понятно, что по нему будет идти выборка
Приведу для наглядности примеры схем:
1) Одна большая табличка. В ней версия будет устаревать и соотвественно данные тоже протухать, но версия устаривает не в смысле времени, а в смысле логики приложения. Стоит добавить что никаких серьезных тяжелых данных таблица не хранит.
CREATE TABLE IF NOT EXISTS AllEntities
(
key_time Int32,
entity_version_id UUID -- (не больше 10к),
-- + еще несколько других колонок
) ENGINE = MergeTree()
ORDER BY(entity_version_id, key_time)
;
Ну и примерно такая же схема для каждой сущности. Да они легко удаляются, но таких таблиц будет очень много.
CREATE TABLE IF NOT EXISTS EntityTable#EntityID
(
key_time Int32,
-- + еще несколько других колонок
) ENGINE = MergeTree()
ORDER BY(key_time)
; -
Добрый день. КХ стал медленно работать, очень медленно, большие запросы от несколько десятков минут до нескольких часов отрабатывают.
Версия 20.12.4.5
Ошибок в логах нет. Рестарт не помогает. Есть вот такой непрекращающийся бесконечный поток логов.
Подскажите пожалуйста в чем проблема? -
SELECT toDateTime(now()) AS column, toTypeName(column) AS x
возвращает
2021-08-26 07:17:24', 'DateTime(''Europe/Moscow'')
Но когда прогоняю на локальной БД
SELECT created_at, toTypeName(created_at) AS x FROM testbd.testtable
Возвращается
2021-08-26 07:17:24', 'DateTime
--
Какая таймзона используется в локальной БД? Можно как-то явно получить ее название? -
SELECT timezone()
-
Т е если при создании таблицы не указано DateTime(TZ), а DateTime просто, то он берет серверную?
-
да
-
🤝
-
Не очень понятно при чем тут КХ. Я правильно понял, что у вас 500-1000 уникальных объектов, каждый из которых порождает фактически одну строку (без учета дубликатов)? Но вобще такая задача решается примерно так:
CREATE TABLE IF NOT EXISTS AllEntities
(
ts DateTime,
entity_id UInt64,
entity_version UInt16
data String -- JSON
) ENGINE = ReplacingMergeTree(entity_version)
ORDER BY entity_id;
будет схлопываться по уникальному entity_id, с учетом версии. Не забывайте правильно апгрейдить номер версии при вставках. -
Коллеги, а можно принудительно заставить КХ отдать память оперативную после выполнения запроса, а то он отдает ее не сразу.
-
Спасибо за ответ!
Май бэд, не очень доступно объяснил, что данных в таблице будет очень много по версии сущности, они все уникальны и схлопывать их не стоит. -
тогда вам стоит описать более четко критерии автоматической чистки данных. Вы сказали, что TTL не подходит, тогда что? Если делать руками, то можно через alter/delete, которая сделает полную перезапись всех данных таблицы или партиции, что может быть в вашем случае допустимо, а может быть и нет.
-
Используй SYSTEM DROP <cahe type> CACHE для очистки памяти после запроса
-
как clickhouse-copier передать креды пользователя?
Я пытался в xml кинуть <user> но нет -
Помогло
<replica>
<host>your-clickhouse-server.com</host>
<port>port</port>
<user>your-user</user>
<password>password</password>
<secure>1</secure>
</replica> -
Доброго дня. Подскажите пожалуйста. Обновились с 21.3LTS до 21.8LTS и отвалились запросы где в джойнах есть сравнение с не колонкой. вида:
SELECT
A.value1,
B.value2
FROM
aTable A
JOIN bTable B
ON B.column1 = A.column1 AND B.column2 = 'qwerty'
вот на последнее условие получаю эксепшн
Not equi-join ON expression: iB.column2 = 'qwerty'. No columns in one of equality side.: While processing B.column2 = 'qwerty'
есть ли способ вернуть старую логику не переписывая кучу запросов. -
Разве халяльно юзать join?
-
спасибо
-
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/replication/#creating-replicated-tables
other_parameters — что православно использовать в качестве параметра для ReplicatedMergeTree?Репликация данных | Документация ClickHouseРепликация данных Репликация поддерживается только для таблиц семейства MergeTree: ReplicatedMergeTree ReplicatedSumming
-
модераторы чата и редакторы документации мониторят чат для дополнения документации?
-
в ReplicatedMergeTree ничего не передаётся, это для Replacing например, где можно версию задать
-
В зависимости от типа MergeTree, например, в SummingMergeTree можгл указать columns — колонки, в которых будут суммироваться данные
-
тут врядли кому-то платят за это. Разве что кто-то (например Вы) на добрых началах дополнит документацию )
-
Если ничего не передавать, репликация ломается
-
эээ, вы что-то значит делаете не так
-
речь идёт только о other_parameters если что
-
Я тоже об этом
-
третий параметр нужен был для clickhouse-copier
DB::Exception: Expected at least 3 arguments in ENGINE -
у нас все таблицы так созданы
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/db.table_name', '{replica}') -
Скорее, не репликация ломается, а копирование не начинается.
https://altinity.com/blog/2018/8/22/clickhouse-copier-in-practice
Use Case #2: Extending a single node server to a multiple nodes clusterClickhouse-copier in practiceClickhouse-copier is a tool designed to copy data from one ClickHouse environment to another. The tool is a part of standard ClickHouse server distribution. It can work in a fully parallel mode and distribute the data in the most efficient way. In this article, we review a few typical examples when clickhouse-copier can be used.
-
без третьего параметра приступлю скоро по этой инструкции https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/replication/#preobrazovanie-iz-mergetree-v-replicatedmergetreeРепликация данных | Документация ClickHouse
Репликация данных Репликация поддерживается только для таблиц семейства MergeTree: ReplicatedMergeTree ReplicatedSumming
-
Читать доку в гитхабе намного приятнее для глаз, оказывается. Буст к восприятию текста
https://github.com/ClickHouse/ClickHouse/blob/master/docs/ru/engines/table-engines/mergetree-family/replication.md
Хоть и содержание такое жеClickHouse/replication.md at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Странная ситуация, MV отрабатывает через раз.
В таблицу table1 вставляются данные пачками по 10000 строк, обнаружилось, что для некоторых строк (закономерность пока не могу найти), данные в таблице table1 есть (те по select final они видны), а вот в MV этих данных нету
Если повторно руками вставить данные в исходную таблицу, то они появляются в MV
Как такое дебажить? куда смотреть?
CREATE TABLE table1
(
`item` String,
`event_source_hi` Int8 DEFAULT -1,
`event_source_lo` Int8 DEFAULT -1,
`event_state` Int8 DEFAULT -1,
`event_last_seen` UInt32 DEFAULT 0
)
ENGINE = ReplacingMergeTree(event_last_seen)
PRIMARY KEY item
ORDER BY (item, event_source_hi, event_source_lo, event_state)
к ней приделана MV таблица
CREATE MATERIALIZED VIEW table1_mv
ENGINE = AggregatingMergeTree
PRIMARY KEY item
ORDER BY item
TTL toDateTime(last_seen, 0, 'UTC') + toIntervalMonth(13)
SETTINGS index_granularity = 8192 AS
SELECT
item,
maxSimpleStateIf(event_last_seen, (event_source_hi = 0) AND (event_source_lo = 0) AND (event_state = 1)) AS a1_last_seen,
maxSimpleStateIf(event_last_seen, (event_source_hi = 0) AND (event_source_lo = 1) AND (event_state = 1)) AS a2_last_seen,
... (куча похожих полей)
maxSimpleState(event_last_seen) AS last_seen
FROM table1
GROUP BY item
SETTINGS optimize_aggregation_in_order = 1 -
Хай, как можно pivot сделать ?
-
Коллеги, я пытаюсь удалить строки из большой таблицы, а в логах вот что:
Max size depends not only on available space, but also on settings 'number_of_free_entries_in_pool_to_execute_mutation' and 'background_pool_size'
просить админов подкрутить какие-то параметры? -
всем привет! А в движках типа summingMergeTree можно ли использовать несколько Primary Keys?
-
Через case разве что
-
-
-
-
лучше просто подождать
прогресс есть? -
неа, он ничего не делает
-
много партов осталось?
-
там очень много данных
-
партиции по дню
-
мне кажется ему чего-то не хватает в настройках )
-
почему вам так кажется?
-
7.090124 [ 946 ] {} <Debug> relap_logs.promo_stat_collector: Current max source part size for mutation is 0 but part size 80309. Will not mutate part 202107_3_3_0. Max size depends not
only on available space, but also on settings 'number_of_free_entries_in_pool_to_execute_mutation' and 'background_pool_size' -
а почему вы считаете, что он ничего не делает?
-
Всем привет.
Нужно мониторить много железок. Сейчас надо собирать порядка 50 метрик, но их количество и набор точно будет меняться. У разных метрик могут быть разные типы данных, плюс разные метрики собираются с разным интервалом (например, загрузка процессора - Float32 и собирается раз в минуту, потребляемая память - Int32 и собирается раз в 5 минут, статус железки - String и собирается раз в час).
Хотим сделать под это дело таблицу, в которой данные одного типа будут лежать +- рядом и отсортированы по времени, вида
create table MetricsStorage(
MetricID Int32,
Ts Int32,
ValueInt32 Int32,
ValueFloat32 Float32,
ValueString String
)
engine = MergeTree()
order by (MetricID, Ts)
;
Ну и служебную таблицу, на основании которой софтина будет понимать в какое из полей писать значение метрики, вида
create table Metrics(
ID Int32,
Name String,
DataType String
)
engine = MergeTree()
order by (ID)
;
Это нормальное решение? Или есть какие-то более правильные\общепринятые варианты? -
количествао записей не поменялось, там странная проблема "я делаю вот так ALTER TABLE adroom_stat_collector DELETE WHERE adroom_id in (select id from a2b);"
-
-
и там и там колонки uint32 но мутация падает
-
посмотрите в system.mutations
-
там и смотрим, мутация упала
-
если она падает, никакие параметры ей не помогут
убивайте и переписывайте, чтобы не падала 🙂 -
кого убивать?) я мирный
-
-
так она сдохла уже давно сама
-
разве нет?
-
-
-
ничоси, щас попробуем)
-
а где можно почитать про замечательный синтаксис выражений с именем колонки в [ ] , который делает массив ? select sumMap([category], [quantity]) from sales;
-
спасибо
-
заработало)
-
Syntax | ClickHouse Documentation
Syntax There are two types of parsers in the system: the full SQL parser (a recursive descent parser), and the data form
-
Всем добра!
Подскажите как заставить кликхауз оповестить когото/чегото о том что в таблице появились новые данные?
Триггер? -
можно построить MaterializedView, которое будет хранить timestamp последней вставленной записи
-
но её нужно будет сканировать чемто?
-
можно писать в кафку/дёргать url
-
Yes
-
т.ё. исходно фичи уведомления нет?
-
https://clickhouse.tech/docs/ru/engines/table-engines/special/url/
можно повесить mat view на url в теории, сам так не делал)URL | Документация ClickHouseURL(URL, Format) Управляет данными на удаленном HTTP/HTTPS сервере. Данный движок похож на движок File. Использование дв
-
можно попробовать на Live views сделать
-
это фича кликхауз?
-
Представление | Документация ClickHouse
CREATE VIEW Создаёт представление. Представления бывают двух видов - обычные и материализованные (MATERIALIZED). Обычные
-
Благодарю за заданный вектор, пошел изучать мануалы
-
там описан самый простой вариант - [1, 2, 3] - просто массив.
Смотрим на магию:
sumMap - требует два массива
select [category], [quantity] from sales; - дает две колонки, где в строках массивы единичной длинны
select sumMap([category], [quantity]) from sales; - работает отлично, как будто конструкция [category] собирает один массив из всей колонки по аналогии с groupArray. Но заменить тут [] на groupArray не получится - Aggregate function groupArray(category) is found inside another aggregate function in query -
Ну все правильно,
Вы же массивы агрегируете.
Так что пусть они будут единичной длины, нам это не мешает -
https://kb.altinity.com/altinity-kb-functions/resample-vs-if-vs-map-vs-subquery
По поводу агрегации между категориями-Resample vs -If vs -Map vs Subquery5 categories SELECTsumResample(0,5,1)(number,number%5)ASsumFROMnumbers_mt(1000000000) ┌─sum ───────────────────────────────────────────────────────────────────────────────────────────┐│[99999999500000000,99999999700000000,99999999900000000,100000000100000000,100000000300000000] │└───────────────────────────────────────────────────────────────────────────────────────────────┘1rowsinset.Elapsed:1.010sec.Processed1.00billionrows,8.00GB(990.20millionrows/s.,7.92GB/s.)SELECTsumMap([number%5],[number])ASsumFROMnumbers_mt(1000000000) ┌─sum ─────────────────────────────────────────────────────────────────────────────────────────────────────────┐│([0,1,2,3,4],[99999999500000000,99999999700000000,99999999900000000,100000000100000000,100000000300000000]) │└─────────────────────────────────────────────────────────────────────────────────────────────────────────────┘1rowsinset.Elapsed:5.730sec.Processed1.00billionrows,8.00GB(174.51millionrows/s.,1.40GB/s.)SELECTsumIf(number,(number%5)=0)ASsum_0,sumIf(number,(number%5)=1)ASsum_1…
-
а не подскажите как tuple из sumMap разбить на колонки как в примере с sumIf?
-
-
Вручную.
Плюс надо понимать, что в случае sumMap категории могут съехать -
всмысле что сортировка может быть разная?
-
В смысле, что вдруг в том запросе что вы делаете не окажется category = 1
И и первая категория будет = 2 -
-
в примере про pivot они через cast превращают тупл в мап, а потом уже обращаются по индексам - map['AA']
-
👍
-
Подскажите, делаем вставку в Distributed таблицу с рандомным ключом шардирования, настройка insert_distributed_sync включена, но при этом данные появляются не сразу, приходится делать sleep минуту. Надо что-то ещё подкрутить чтобы не надеяться на sleep? Увеличение insert_distributed_timeout может помочь?
-
А зачем вам ждать?
-
перед тем как начать читать, данные появляются только частично, если подождать немного то данные полностью появляются
-
Вам нужно прочитать только что вставленные данные зачем?
1. Убедиться, что они вставились.
2. Вернуть какую то посчитанную метрику -
товарищи, прошу помоч, кто знает
есть materialized_view c агрегатным полем, как я понимаю типа AggregateFunction(max, DateTime)
как для пользователя для меня это просто DateTime
и я хотел бы по этому полю фильтровать
как возможно это делать? -
Использовать SimpleAggregateFunction
Но по этому полю строго говоря нельзя фильтровать, сначала нужно до агрегировать все данные с помощью GROUP BY и только потом фильтровать -
проверяем что данные валидные чтобы дальше перелить в следующую таблицу.
-
спасибо. но если мне придется самому потом в запросе доагрегировать, и известно что в материалайд вью не поступит большая пачка, которая предварительно аггригируется, возможно смысла в материалайз вью нет?
-
Репликация асинхронная, вполне возможно что ваши данные до второй реплики не доехали. а Distributed запрос пришел на вторую реплику.
https://clickhouse.tech/docs/en/sql-reference/statements/system/#query_language-system-sync-replica
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-max_replica_delay_for_distributed_queriesSYSTEM | ClickHouse DocumentationSYSTEM Statements The list of available SYSTEM statements: RELOAD EMBEDDED DICTIONARIES RELOAD DICTIONARIES RELOAD DICTI
-
спасибо, похоже на это
-
-
Добрый вечер. Подскажите, пожалуйста. Упала нода clickhouse. После поднятия полились массово ошибки:
2021.08.26 16:15:18.046991 [ 197463 ] {} <Error> DDLWorker: ZooKeeper error: Code: 999, e.displayText() = Coordination::Exception: No node, Stack trace (when copying this message, always include the lines below):
0. Coordination::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Coordination::Error, int) @ 0xf87ee03 in /usr/bin/clickhouse
1. Coordination::Exception::Exception(Coordination::Error) @ 0xf87f2ce in /usr/bin/clickhouse
2. DB::DDLWorker::createStatusDirs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<zkutil::ZooKeeper> const&) @ 0xe88509e in /usr/bin/clickhouse
3. DB::DDLWorker::processTask(DB::DDLTask&) @ 0xe88afd7 in /usr/bin/clickhouse
4. DB::DDLWorker::enqueueTask(std::__1::unique_ptr<DB::DDLTask, std::__1::default_delete<DB::DDLTask> >) @ 0xe88a20d in /usr/bin/clickhouse
5. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x8505178 in /usr/bin/clickhouse
6. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()&&...)::'lambda'()::operator()() @ 0x850712f in /usr/bin/clickhouse
7. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x850274f in /usr/bin/clickhouse
8. ? @ 0x85061e3 in /usr/bin/clickhouse
9. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
10. __clone @ 0xfe8dd in /usr/lib64/libc-2.17.so
(version 21.2.10.48 (official build))
zookeeper тоже жив. Подскажите, пожалуйста, в чем может быть проблема? -
а если усложнить кейс, пишем напрямую в шарды в tmp таблицы и по завершению записи делаем replace partition on cluster. Может ли реплейс пройти без синхронизации репликации? Раньше никаких проблем не было, но сейчас раз в неделю бывает что не хватает части данных
-
Cannot write to ostream at offset: While executing JSONRowOutputFormat
кто-нибудь знает почему запрос падает с такой ошибкой? Взял из логов -
это может быть из-за read timeout? или из-за того, что все ресурс CPU закончились на кластере?
-
-
нет и не планируется. Оконные функции работают сильно позже.
-
ошибка где? это клиент такое увидел?
-
на уровне инсерта, в replicated таблицу
-
В system.query_logs
-
это просто клиент ушел, и результат было некому принять
-
ага, если я поретраю в другую реплику, то будет дедупликация?
-
да
контрольная сумма в зукипере, все реплики ее проверяют -
Хм, спасибо
-
А я если клиент видит read timeout
-
То какой это exception в логах?
-
это по разному.
например возможно такое, начинается запрос и долго выполняется.
Клиент ждет 30 сек. и бросает read timeout и уходит. Сервер через 10 минут выполнив запрос пытается его передать клиенту, а клиента уже нет, и сервер пишет Cannot write to ostream at offset
а бывает что это баг в КХ, и например сервер через секунду пишет в лог Cannot write to ostream at offset, и обламывает все, а клиент через N секунд не дождавшись сервера пишет read timeout -
Вот оно как! Теперь понятно
-
Спасибо еще раз
-
кажется это нормально, если это в течении пары минут такое.
При старте начинается чистка старых DDDL заданий, и получается что несколько серверов пытаются удалить одно и тоже, и последние обламываются. -
есть функция finalizeAggregation
-
кстати я пропустил фичу
https://clickhouse.tech/docs/en/operations/settings/settings/#distributed_ddl_output_modeSettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
- 27 August 2021 (162 messages)
-
Проблема в том, что это не прекращается. Когда рестартанула нода, то ЗК переключил её на свою другую ноду. При повторном рестарте ноды КХ проблема продолжается.
-
сделал
revoke common_role from user;
GRANT common_role TO user;
Начало заработало( -
получается что ползьовватель получает не получает новые права, которые дали роли после того как ползователю ее дали
-
-
Добрый день.
Структура таблицы
-----------------
DESCRIBE TABLE counterparty_report
id String ID
moment Date DEFAULT now() Дата остатка
counterparty String Контрагент
firstDemandDate DateTime Дата первой продажи
lastDemandDate DateTime Дата последней продажи
demandsCount Int32 Количество продаж
demandsSum Float32 Сумма продаж
averageReceipt Float32 Средний чек
returnsCount Int32 Количество возвратов
returnsSum Float32 Сумма возвратов
discountsSum Float32 Сумма скидок
balance Float32 Баланс
bonusBalance Float32 Баллы
profit Float32 Прибыль
lastEventDate DateTime Дата последнего события
lastEventText String Текст последнего события
updated DateTime Момент последнего изменения контрагента
counterparty_id String id контрагента
counterparty_externalCode String Внешний код контрагента
Запрос
-----------------
INSERT INTO counterparty_report
(id,moment,counterparty,firstDemandDate,lastDemandDate,demandsCount,demandsSum,averageReceipt,returnsCount,returnsSum,discountsSum,balance,bonusBalance,profit,lastEventDate,lastEventText,updated,counterparty_id,counterparty_externalCode)
VALUES
('ed335f61-82e0-4365-b9d3-95332b431137','2021-08-27','test1','','','0','0','0','0','0','0','1722000','0','0','','','2017-07-06 06:07:03','2f676bc3-61f8-11e7-7a31-d0fd00010e3e','J-3T6SS9iMWPKwr7qa1xP3'),
('575b32d6-9e91-4e39-83b5-5f8ae3c36420','2021-08-27','test2','2021-08-24 06:12:00','2021-08-24 06:12:00','1','14930','14930','0','0','0','389500','0','7480','','','2021-08-26 06:08:56','d34faf3d-cd78-11e9-912f-f3d40026c10c','pqpPpov2hVwaoVZiF38rI1'),
('3ae1b499-3d84-4dd3-9f02-441d70db6a56','2021-08-27','test3','2021-05-17 09:21:00','2021-07-31 06:36:00','15','3291530','219435.33333333','0','0','339370','405350','0','1888330','','','2021-08-26 06:09:26','e08d54e7-8db1-11e9-9109-f8fc001dd749','xtzAGXVgjJEP3on1w68B33')
Ошибка:
-----------------
[0] => Code: 62, e.displayText() = DB::Exception: Cannot parse expression of type Float32 here: 'J-3T6SS9iMWPKwr7qa1xP3'),
[1] => ('575b32d6-9e91-4e39-83b5-5f8ae3c36420','2021-08-27','test2','2021-08-24 06:12:00','2021-08-24 06:12:00','1','1493 (version 21.7.7.47 (official build))
*************
Какую строку и почему он пытается распарсить как Float32 ? -
Похоже что это то что нужно, но настораживает вот это:
"Важно
Представления LIVE VIEW являются экспериментальной возможностью. Их использование может повлечь потерю совместимости в будущих версиях."
На сколько можно использовать эту фичу в продакшене? Планируется ли её поддержка а дальнейшем? -
Коллеги, имеем неработающую механику TTL для колонки.
ClickHouse server version 21.2.8 revision 54447
DDL таблицы
CREATE TABLE d1.t1
(
`event_timestamp` DateTime('UTC') CODEC(DoubleDelta, LZ4),
`c1` UInt64,
`c2` UInt64,
`c3` LowCardinality(String),
`c4` LowCardinality(String),
`proto_fields` String TTL toDate(event_timestamp) + toIntervalDay(1)
)
ENGINE = ReplicatedMergeTree('/clickhouse/{installation}/{cluster}/tables/{shard}/xdraymon/map_local', '{replica}')
PARTITION BY toYYYYMMDD(event_timestamp)
ORDER BY (toStartOfInterval(event_timestamp, toIntervalMinute(15)), c3, c4, c1, c2)
TTL toDate(event_timestamp) + toIntervalDay(21)
SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1
TTL на таблицу работает как и ожидалось, а вот на колонку proto_fields не работает.
Данные остаются и не удаляются.
Ручной CLEAR COLUMN очищает данные в партициях колонки как положено.
Из особенностей можно еще сказать то, что TTL на колонку proto_fields вешался через ALTER. -
Всем здрасьте, у меня тут по прогрессу просмотра образовался вопрос по Clickhouse Keeper, который будет заменой ZK. На данном слайде:
https://youtu.be/IfgtdU1Mrm0?t=4178
Видно, что CH переходит на новую схему репликации (насколько и если правильно я успела понять), но тогда каким образом clickhouse-keeper выбирает лидера (мастера)? Тип по конфигурации?
Upd.: кажется, найден ответ, но надо проверять...August ClickHouse Bay Area Meetup -- SigNoz and Nukeeper (Zookeeper Replacement)Join us for this session on latest #ClickHouse news. We have presentations on SigNoz and Zookeeper replacement in ClickHouse (Yay!). See the meetup invite for more information: https://www.meetup.com/San-Francisco-Bay-Area-ClickHouse-Meetup/events/279109379/ #DataWarehouse #Meetup ----------------- Check out more ClickHouse resources here: https://altinity.com/resources/ Join Reddit community: https://www.reddit.com/r/Clickhouse/ ----------------- Learn more about Altinity! Site: https://www.altinity.com LinkedIn: https://www.linkedin.com/company/alti... Twitter: https://twitter.com/AltinityDB
-
а каким образом можно синхронизировать DDDL вручную? т.к. ошибка не пропадает вот уже несколько часов... и не понятно из-за чего такое поведение
-
Ребят, привет!
Подскажите пожалуйста такой момент.
Если я в запросе для Матвью сделаю подзапрос, в котором обращаюсь к этой же таблице, на которую смотрит матвью, то откуда в результате данные будут браться в этом подзапросе? Из вставляемых данных или из данных на диске? -
-
-
Date32
-
добрый день! подскажите пожалуйста, можно ли как-то оптимизировать такой запрос?
SELECT *
FROM (
SELECT
timestamp,
rid,
bs,
h,
count() OVER w AS cnt,
row_number() OVER w AS rn
FROM table
WHERE
timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59'
AND component != 'ec'
AND notEmpty(rid)
AND tt = 'u'
WINDOW w AS (PARTITION BY timestamp, rid, c, cr)
)
WHERE cnt > 1
Сейчас работает более-менее ок (жрёт 20 гб памяти), но при добавлении более тяжёлых колонок выжирает всю память. -
из вставляемых данных
-
таблица отсортирована по timestamp, хочу найти дубликаты по timestamp, rid, c, cr
-
Подскажите плс с какой версии появилась? В доке тип нашел, но
Unknown function toDate32
смотрю на версии 21.7.3.14 -
Всем привет!
Товарищи, помогите плиз разобраться с проблемой.
Есть dag в Airflow. Его задача — инкрементальное обновление витрины. Во время его выполнения он падает вот с такой вот ошибкой.
- File "clickhouse_driver/varint.pyx", line 40, in clickhouse_driver.varint.read_varint
INFO - File "clickhouse_driver/bufferedreader.pyx", line 55, in clickhouse_driver.bufferedreader.BufferedReader.read_one
INFO - File "clickhouse_driver/bufferedreader.pyx", line 188, in clickhouse_driver.bufferedreader.BufferedSocketReader.read_into_buffer
INFO - socket.timeout: timed out
INFO - Command exited with return code 1
скрипт то работает 5 мин, то 3 часа, но в какой-то момент стабильно падает в таймаут. пробовали использовать
import socket
socket.setdefaulttimeout(20000)
не помогло -
похоже что только в 21.9 попало
-
а чем вам обычный group by не угодил?
SELECT timestamp, rid, c, cr, any(bs), any(h)
FROM (
SELECT
timestamp, rid, c, cr
bs,
h
FROM table
WHERE
timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59'
AND component != 'ec'
AND notEmpty(rid)
AND tt = 'u'
)
group by timestamp, rid, c, cr
WHERE count() > 1
Не очень понятно чего вы ожидаете от bs & h но если нужны все значения, то можно сделать groupArray/arrayJoin -
в память не влезает практически моментально
-
-
set distributed_aggregation_memory_efficient=1 (default from 21.3)
set max_bytes_before_external_group_by='40G'
max_threads=1 -
-
-
vsem privet, podskazhite pleasee
u menia cmake 3.21.2
no kogda build delayu s
CMake Error at contrib/xz/CMakeLists.txt:50 (cmake_minimum_required):
CMake 3.13 or higher is required. You are running version 3.12.1 -
u menia macos
-
Всем привет! После обновлния на 21.8.4.51 перестала работать конструкция (%(stores)s is null or store_n in %(stores)s) для PREWHERE, ошибка Column store_n is not under aggregate function and not in GROUP BY: While processing ((isNull(NULL) OR (store_n IN (NULL)))
Ранее все работало, в переменную можно было передать или null или список значений. -
Есть ли какие-то альтернативные варианты передачи параметра в PREWHERE, который может быть или пустым, или списком?
-
Вопрос по дедупликации блоков для ReplicatedMergeTree. Насколько я понимаю, чтобы поддержать exactly once семантику для записи нужно делать две вещи:
1. Каждый блок данных, который идет в таблицу, должен иметь уникальный компонент (допустим специальную колонку), чтобы даже при наличии идентичных данных отличаться от предыдущих (чексумма должна быть уникальной).
2. Все retry должны идти в тот-же шард, что и первые, чтобы найти повторы в ЗК.
Возник вопрос по поводу пункта 1, вместо уникальной колонки, есть ли возможноть просто блоку назначить уникальный ID, чтобы он присутствовал в метаданных и читался при дедупликации, а не занимал колонку (которую надо еще чистить). -
Ну и правильно ли я понимаю, как оно работает.
-
-
-
-
значит это другая проблема. Других проблем нет? Только ругань в логах? У вас ЗК вообще в ансамбле ?
-
какая версия КХ ? Пользователь user реконектится к БД?
-
поиск проблемы делается как и с любым другим софтом. смотрите во что упирается программа, в диск, проц, память, сеть и т.д.
-
mv работает как часы, швейцарские. у вас где-то косяк в ttl или агрегации.
-
-
нет, да и смысла тоже нет, да и то как бы даже названию противоречит.
-
мат вью обычно используется для того чтобы делать агрегции данных, которые занимают меньше места и быстрее работают или для подготовки данных, чтобы потом при селекте всё работало быстрее. просто делать мат вью для того чтобы было - нет смысла
-
делайте по примерам из доки https://clickhouse.tech/docs/ru/sql-reference/aggregate-functions/combinators/#agg-functions-combinator-ifКомбинаторы агрегатных функций | Документация ClickHouse
Комбинаторы агрегатных функций К имени агрегатной функции может быть приписан некоторый суффикс. При этом, работа агрега
-
используйте докер
-
увы, не знаю, 3 ноды. Если я правильно понял вопрос (про ansible?) то нет (clickhouse - да). Нашли еще, что есть таски, которые не выполняются в system.distributed_ddl_queue. Еще в логах видим ошибку связанную с таской query-0000001413. Но нигде ее найти не можем, ни файла, ни записи в таблицах. (system.zookeeper / system.distributed_ddl_queue). Ситуация была примерно такая: нода кх упала по памяти, после растарта ЗК решил переключить ее на свою другую ноду и посыпались ошибки как я указывал выше.
-
-
Читайте доку. Там всё есть.
https://clickhouse.tech/docs/ru/sql-reference/statements/select/with/WITH | Документация ClickHouseСекция WITH Clickhouse поддерживает Общие табличные выражения, то есть позволяет использовать результаты выражений из се
-
ЗК ничего не решает. Просто КХ решил подключится к другой ноде.
Кластер в ЗК называется ансамбль (ensemble)
проверьте статус на всех ЗК
echo stat | nc ip_zk 2181
надо иметь один лидер и 2 фоловера -
-
-
-
-
-
https://github.com/ClickHouse/ClickHouse/issues/26331
Пользуйтесь CLEAR COLUMN, не будете горя знатьttl_only_drop_parts affects TTL for columns in a strange way · Issue #26331 · ClickHouse/ClickHouseI enabled TTL for several columns, and I used different TTL expressions with different TTL periods. I also enabled ttl_only_drop_parts because I didn't want ClickHouse to re-merge older par...
-
# echo stat | nc localhost 2181
stat is not executed because it is not in the whitelist.
поэтому так:
echo mntr | nc localhost 2181 | grep 'leader'
zk_server_state leader
zk_leader_uptime 37520695236
echo mntr | nc localhost 2181 | grep 'follow'
zk_synced_followers 2
zk_synced_non_voting_followers 0
zk_avg_follower_sync_time 22.0
zk_min_follower_sync_time 22
zk_max_follower_sync_time 22
zk_cnt_follower_sync_time 1
zk_sum_follower_sync_time 22
похоже на правду -
Посмотрите по логу, что пытался сделать поток, который получил ошибку No node
-
-
Печаль. Будем думать. Спасибо.
-
есть запись только:
97158 197463 ? 03:36:30 DDLWorkerExec
и в логах вижу сообщение только от одного этого потока и больше ничего
/var/log/clickhouse-server/clickhouse-server.log
message
2021.08.27 13:24:02.649745 [ 197463 ] {} <Error> DDLWorker: ZooKeeper error: Code: 999, e.displayText() = Coordination::Exception: No node, Stack trace (when copying this message, always include the lines below):
0. Coordination::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Coordination::Error, int) @ 0xf87ee03 in /usr/bin/clickhouse
1. Coordination::Exception::Exception(Coordination::Error) @ 0xf87f2ce in /usr/bin/clickhouse
2. DB::DDLWorker::createStatusDirs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<zkutil::ZooKeeper> const&) @ 0xe88509e in /usr/bin/clickhouse
3. DB::DDLWorker::processTask(DB::DDLTask&) @ 0xe88afd7 in /usr/bin/clickhouse
4. DB::DDLWorker::enqueueTask(std::__1::unique_ptr<DB::DDLTask, std::__1::default_delete<DB::DDLTask> >) @ 0xe88a20d in /usr/bin/clickhouse
5. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x8505178 in /usr/bin/clickhouse
6. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()&&...)::'lambda'()::operator()() @ 0x850712f in /usr/bin/clickhouse
7. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x850274f in /usr/bin/clickhouse
8. ? @ 0x85061e3 in /usr/bin/clickhouse
9. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
10. __clone @ 0xfe8dd in /usr/lib64/libc-2.17.so
(version 21.2.10.48 (official build))
В содержимом tcp пакета постоянно ловим:
13:22:27.614459 IP 172.* > 172.*: Flags [P.], seq 679570:679789, ack 169641, win 8192, length 219
E...0D@.@..l...n....K .....D.'.MP. ..G.......U.e................2/clickhouse/task_queue/ddl/query-0000001413/active................world....anyone................4/clickhouse/task_queue/ddl/query-0000001413/finished................world....anyone.............
13:22:27.614906 IP 172.* > 172.* Flags [P.], seq 679789:679915, ack 169696, win 8192, length 126
E...0E@.@......n....K .......'..P. ..?.....z.U.f.......K/clickhouse/task_queue/ddl/query-0000001413/active/nl%2Dzia%2Einternal:9000................world....anyone....
в логах нашли запись по этой таске:
SELECT query FROM system.query_log WHERE query LIKE ‘%query-0000001413%’ ORDER BY event_time DESC ;
┌─query──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ /* ddl_entry=query-0000001413 */ CREATE TABLE IF NOT EXISTS shard.kafka_geo_groups_with_dates_events UUID ‘8338c429-c58a-4286-a0d7-5bb067368989’ (`data` String) ENGINE = Kafka SETTINGS kafka_broker_list = ‘kafka0.*:9092, kafka1.*:9092, kafka2.*:9092, kafka3.*:9092, kafka4.*:9092’, kafka_topic_list = ‘panel_table_changed_v1’, kafka_group_name = ‘clickhouse_kafka_geo_groups_with_dates_events_final’, kafka_format = ‘JSONAsString’, kafka_num_consumers = 1 │
│ /* ddl_entry=query-0000001413 */ CREATE TABLE IF NOT EXISTS shard.kafka_geo_groups_with_dates_events UUID ‘8338c429-c58a-4286-a0d7-5bb067368989’ (`data` String) ENGINE = Kafka SETTINGS kafka_broker_list = ‘kafka0.*:9092, kafka1.*:9092, kafka2.*:9092, kafka3.*:9092, kafka4.*:9092’, kafka_topic_list = ‘panel_table_changed_v1’, kafka_group_name = ‘clickhouse_kafka_geo_groups_with_dates_events_final’, kafka_format = ‘JSONAsString’, kafka_num_consumers = 1 │ -
У вас какой level в clickhouse-server.log?
Вот это запустите
select * from system.zookeeper where path=‘clickhouse/task_queue/ddl/query-0000001413/‘ -
вот этот номер в логе ищите [ 197463 ]
-
Up
-
select * from system.zookeeper where path='clickhouse/task_queue/ddl/query-0000001413/'
SELECT *
FROM system.zookeeper
WHERE path = 'clickhouse/task_queue/ddl/query-0000001413/'
Query id: 84544fba-5500-4948-bc1f-4bed8d2ba876
0 rows in set. Elapsed: 0.004 sec.
Received exception from server (version 21.2.10):
Code: 999. DB::Exception: Received from localhost:9000. DB::Exception: No node, path: /clickhouse/task_queue/ddl/query-0000001413. -
Всех приветствую! Есть таблица ReplacingMergeTree, в которой парты доросли до ограничения по max_bytes_to_merge_at_max_space_in_pool и перестали сливаться. В таблицу ведется непрерывная запись с большим количеством дублей. Есть какой-то best practice что в таких случаях делать? OPTIMIZE FINAL как-то не очень хочется, так как получу парт ~1.5тб. Есть идея детачить парт и вручную проверять на наличие дублей переливая уникальные данные назад. Может есть более элегантное решение?
-
а что если
WHERE path = '/clickhouse/task_queue/ddl/query-0000001413/' -
то же самое
-
а вообще есть что-нибудь в /clickhouse/task_queue/ddl ?
WHERE path = '/clickhouse/task_queue/ddl' -
Реконнетк не помогает, а вот после ревока и гранта не надо делать реконнект все начинает работать
-
какая версия КХ ? select version()
-
Версия: 21.6.5.37
-
send_receive_timeout пробовали менять в библиотеке? https://clickhouse-driver.readthedocs.io/en/latest/api.html#connection
-
38 записей
-
# grep '197463' /var/log/clickhouse-server/clickhouse-server.err.log | tail -5
2021.08.27 13:56:08.024543 [ 197463 ] {} <Error> DDLWorker: ZooKeeper error: Code: 999, e.displayText() = Coordination::Exception: No node, Stack trace (when copying this message, always include the lines below) -
Ап (пардон). Просто хочу понять, правильно ли я понимаю процесс.
-
полный трейс
2021.08.27 14:16:26.831184 [ 197463 ] {} <Error> DDLWorker: ZooKeeper error: Code: 999, e.displayText() = Coordination::Exception: No node, Stack trace (when copying this message, always include the lines below):
0. Coordination::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Coordination::Error, int) @ 0xf87ee03 in /usr/bin/clickhouse
1. Coordination::Exception::Exception(Coordination::Error) @ 0xf87f2ce in /usr/bin/clickhouse
2. DB::DDLWorker::createStatusDirs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<zkutil::ZooKeeper> const&) @ 0xe88509e in /usr/bin/clickhouse
3. DB::DDLWorker::processTask(DB::DDLTask&) @ 0xe88afd7 in /usr/bin/clickhouse
4. DB::DDLWorker::enqueueTask(std::__1::unique_ptr<DB::DDLTask, std::__1::default_delete<DB::DDLTask> >) @ 0xe88a20d in /usr/bin/clickhouse
5. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x8505178 in /usr/bin/clickhouse
6. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()&&...)::'lambda'()::operator()() @ 0x850712f in /usr/bin/clickhouse
7. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x850274f in /usr/bin/clickhouse
8. ? @ 0x85061e3 in /usr/bin/clickhouse
9. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
10. __clone @ 0xfe8dd in /usr/lib64/libc-2.17.so
(version 21.2.10.48 (official build)) -
Какой последний номер?
-
последний query-0000001493
первый query-0000001438 -
Вообще все неправильно понимаете. Давайте в гитхаб это не телефонный разговор.
-
В смысле в сорцы? 🙂
-
Чудеса. А после рестрта на другой ругается? При рестарте кх пишет дофига про это. Нужен лог в режиме трейс при рестарте
-
Issue/question
Тут писать 2 часа ответ. И потом этот ответ навсегда будет похоронен в чате -
Ок, я сделаю вопрос в discussions, спасибо
-
Exactly-once write semantics · Discussion #28270 · ClickHouse/ClickHouse
Hi Team, I'd like to understand the proper way to ensure exactly-once ingestion into a sharded deployment of ClickHouse (multiple shards, with the same ReplicatedMergeTree tables configured...
-
привет, подскажите, пожалуйста, у кого был опыт с функцией anyLast(). Как именно она работает. Хочу использовать ее для извлечения значения последний записи из колонки по которой делаю group by. Смущает то, что в документации написанно, что она недетерминированная
-
т.е. вы хотите сунуть агрегатную функцию в group by?
-
а зачем? кликхаус сам в фоне это сделает максимально эффективно. или у вас в новом непрерывном потоке идут уже только уникальные строки, которые никак не пересекаются со старыми данными и вам хочется и старые данные привести в консистентное состояние? иначе если новые данные продолжают пересекаться со старыми, то в консистентном состоянии после оптимайза оно у вас проживёт максимум минуту.
-
фоновые мержи прекращаются если суммарный размер кусков для слияния больше чем max_bytes_to_merge_at_max_space_in_pool получается со временем на старых партах мержи прекращаются совсем и к ним добавляются всё новые и новые
-
-
Неа
Спасибо за совет! -
Я правильно понимаю, что для округления есть 9 встроенных функций, из которых две реализуют бухгалтерское округление (round и roundBankers) и ни одна не реализует простое 2.5 ->3?
select round(1.05, 1), round(1.15, 1), round(1.25, 1), round(1.35, 1), round(1.45, 1), round(1.55, 1) format TSV;
1 1.2 1.2 1.4 1.4 1.6 -
ceil(x[, N])?
-
типа как в школе округляли? используйте банковское, оно в случае пятёрки округляет до чётного, а не всегда в верхнюю сторону, благодаря чему накопленная ошибка растёт меньше. взрослый инструмент - взрослое округление :)
-
Приветствую, что можно сделать с тем, что superset не видит столбец с типом DateTime64, как временной ряд в датасете ?
-
хотя конечно функция roundMath не была бы лишней, чтобы например цифры с постгресом сверить или типа того
-
обновиться?
-
Дак только что все установил
-
навскидку саппорт DateTime64 уже давно добавили. возможно ваш кейс не покрыт
https://github.com/apache/superset/search?q=DateTime64&type=issuesSearch · DateTime64 · apache/supersetApache Superset is a Data Visualization and Data Exploration Platform - Search · DateTime64 · apache/superset
-
-
DateTime64
-
и что у вас за версия суперсета?
-
git clone и docker-compose
-
Но почему то показывает 00000
-
тогда нужно заводить тикет на гитхабе
-
На этом и встрял: сверял суммы, посчитанные то ли другой базой, то ли бэкендом. Естественно, там везде классическое округление (и достаточное количество запасных знаков после запятой, чтобы оно не портило результат).
-
На мой взгляд, надеяться на ReplacingMT в таких больших таблицах - архитектурная ошибка.
Все время придется перемерживать те 1.5 терабайта, мало кто этого хочет.
Побейте на партиции может? -
Спасибо, Татьяна. Не бьется к сожалению разумно ( Буду костылить.
-
Похожая архитектруа с иммутабельными сегментами в ElasticSearch, но там есть счётчик удалений, как только он перваливает за определенный процент сегмент идет на мерж. Понятно что тут такое не возможно.
-
так взять хеш % 20 от какого нибудь ключа из ORDER BY
-
неплохой совет 👍, проблема что чтение по всей таблице, но попробую...
-
пользуясь затишьем, планируется ли в ClickHouse arrays реализовать (или уже есть) функции бинарнного поиска, ну то есть has() по отсортированному массиву?
-
Кто то просил, но думаю это не особо интересно вот и не делают.
Вообще можно тогда в сторону битмапов посмотреть они должны быть быстрее на поиск элементов в них. -
спасибо за наводку
-
А что, большие массивы?
Можно просто транспонировать массив в таблицу в памяти, накинуть на неё индекс и искать :) -
А есть что-то почитать из серии bitmap + clickhouse не на китайском? Пробовал отсюда https://kb.altinity.com/altinity-kb-queries-and-syntax/roaring-bitmaps-for-calculating-retention поиграть с нашими данными, если использовать UInt64 в битмапе получается в разы медленее чем просто uniqExact
-
нет, 200млн маленьких по 100 элементов :)
-
чем uniqExact медленнее будет это факт.
Но скорее всего быстрее чем массивы на некоторых вариантах запросов -
пыщь
-
жаль, думал ускорить расчёт ретеншена за счёт этого
-
А версия какая?
-
21.3 последняя
-
SELECT
timestamp,
rid,
bs,
h,
count() AS cnt,
groupArray(something)
FROM table
WHERE
timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59'
GROUP BY timestamp, rid, c, cr
HAVING cnt > 1
https://clickhouse.tech/docs/en/operations/settings/settings/#optimize_aggregation_in_orderSettings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
так памяти не хватает, rid очень большая колонка и практически каждое значение уникальное
-
Китайцы вроде ретеншен считают кстати битмапами. но они как то хитро ими пользуются
-
если у таблицы
ORDER BY (timestamp)
То optimize_aggregation_in_order=1 не будет жрать память -
-
ну я так понял это они и завезли битмапы в КХ и было бы интересно подробнее узнать как они с ними работают
-
Здравствуйте, есть-ли возможность использовать iam roles в операторе?
-
DB::Exception: Memory limit (total) exceeded: would use 72.00 GiB (attempt to allocate chunk of 4718592 bytes), maximum: 72.00 GiB: While executing AggregatingTransform.
-
SHOW CREATE TABLE xxx;
-
-
Д
-
CREATE TABLE table_lr( `timestamp` DateTime CODEC(DoubleDelta, LZ4), - Pastebin.com
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
-
А если на локальной выполнить?
-
то же самое
-
https://github.com/ClickHouse/ClickHouse/issues/18384
Думал, что aggregation in order по частичному ключу работает, а оказывается что нет.
А много комбинаций rid, c, cr
Для каждого timestamp набирается?Apply optimize_aggregation_in_order even if group by matches the sort key partially · Issue #18384 · ClickHouse/ClickHouseUse case Given some table with a sort key (k1, k2, k3): CREATE TABLE test (k1 Int32, k2 Int32, k3 Int32) ENGINE = MergeTree() ORDER BY (k1, k2, k3); It's possible to use the group by optimi...
-
SELECT
timestamp,
groupUniqArray((rid,
bs,
h)) as uniq,
count() AS cnt
FROM table
WHERE
timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59'
GROUP BY timestamp
HAVING cnt > lenght(uniq) -
-
Ок
-
а подскажите плиз где смотреть идет ли материализация projection.. а то alter table materialize projection выполняется сразу... видимо мне надо было с mutations_sync=1 выполнять? чтобы синхронно было
-
SELECT
database,
table,
partition_id,
sum(parent_rows),
sum(bytes_on_disk),
sum(rows),
sum(bytes_on_disk)
FROM system.projection_parts
WHERE active
GROUP BY
database,
table,
partition_id
ORDER BY
database ASC,
table ASC,
partition_id ASC -
ага, выдает.. Спасибо!
-
именно uniq((rid, bs, h)) или всё-таки uniq((rid, c, cr))?
-
uniqExact(rid, c, cr)
Мы не ожидаем, что там будем много набираться -
┌───────────timestamp─┬───uniq─┬─────cnt─┐
│ 2021-08-25 12:00:00 │ 970890 │ 1131512 │
│ 2021-08-25 12:00:01 │ 970113 │ 1132375 │
│ 2021-08-25 12:00:02 │ 971406 │ 1135308 │
│ 2021-08-25 12:00:03 │ 971706 │ 1137377 │
│ 2021-08-25 12:00:04 │ 977098 │ 1145807 │
│ 2021-08-25 12:00:05 │ 974785 │ 1143080 │
│ 2021-08-25 12:00:06 │ 988491 │ 1159750 │
│ 2021-08-25 12:00:07 │ 986928 │ 1159493 │
│ 2021-08-25 12:00:08 │ 983425 │ 1155304 │
│ 2021-08-25 12:00:09 │ 982310 │ 1153173 │
│ 2021-08-25 12:00:10 │ 975732 │ 1141407 │
│ 2021-08-25 12:00:11 │ 984582 │ 1151035 │
│ 2021-08-25 12:00:12 │ 980825 │ 1145363 │
│ 2021-08-25 12:00:13 │ 981126 │ 1144012 │
│ 2021-08-25 12:00:14 │ 984385 │ 1145369 │
│ 2021-08-25 12:00:15 │ 978781 │ 1138315 │
│ 2021-08-25 12:00:16 │ 988682 │ 1153108 │
│ 2021-08-25 12:00:17 │ 983832 │ 1149268 │
│ 2021-08-25 12:00:18 │ 984239 │ 1151361 │
│ 2021-08-25 12:00:19 │ 981598 │ 1146698 │
│ 2021-08-25 12:00:20 │ 977277 │ 1141136 │
│ 2021-08-25 12:00:21 │ 990555 │ 1158971 │
│ 2021-08-25 12:00:22 │ 985416 │ 1156019 │
│ 2021-08-25 12:00:23 │ 984909 │ 1158693 │
│ 2021-08-25 12:00:24 │ 979217 │ 1152676 │
│ 2021-08-25 12:00:25 │ 974209 │ 1144848 │
│ 2021-08-25 12:00:26 │ 985303 │ 1157579 │
│ 2021-08-25 12:00:27 │ 982138 │ 1153044 │
│ 2021-08-25 12:00:28 │ 977297 │ 1146061 │
│ 2021-08-25 12:00:29 │ 975132 │ 1141497 │
│ 2021-08-25 12:00:30 │ 971803 │ 1134991 │
└─────────────────────┴────────┴─────────┘ -
Ну хм, а сколько памяти использует?
-
-
-
а с aggregation_in_order выполнилось?
Если нет то можно попробовать уменьшить max_block_size или max_threads; -
а каким параметром можно увеличить количество тредов для материализации проекции? а то background_pool_size вроде 16 стоит, а ядро одно грузит только
-
Думаю никаким
-
ставил max_threads = 1 и max_block_size = 100...1M, падает. всё это с optimize_aggregation_in_order = 1
-
Так, а если send_logs_level='trace';
Merging partially aggregated blocks (bucket = -1).
Merged partially aggregated blocks. 65505 rows, 1.25 MiB. in 0.0070238 sec. (9326148.239 rows/sec., 177.88 MiB/sec.)
Такое в логах видно? -
-
Не похоже что бы optimize_aggregation_in_order работало.
У меня логи так выглядят
Aggregator: Merged partially aggregated blocks. 100 rows, 1.95 KiB. in 1.49e-05 sec. (6711409.396 rows/sec., 128.01 MiB/sec.)
Aggregator: Merging partially aggregated blocks (bucket = -1).
Aggregator: Merged partially aggregated blocks. 100 rows, 1.95 KiB. in 1.59e-05 sec. (6289308.176 rows/sec., 119.96 MiB/sec.)
Aggregator: Merging partially aggregated blocks (bucket = -1).
Aggregator: Merged partially aggregated blocks. 100 rows, 1.95 KiB. in 1.53e-05 sec. (6535947.712 rows/sec., 124.66 MiB/sec.)
Aggregator: Merging partially aggregated blocks (bucket = -1).
Aggregator: Merged partially aggregated blocks. 100 rows, 1.95 KiB. in 2.46e-05 sec. (4065040.650 rows/sec., 77.53 MiB/sec.)
Aggregator: Merging partially aggregated blocks (bucket = -1).
Aggregator: Merged partially aggregated blocks. 100 rows, 1.95 KiB. in 1.57e-05 sec. (6369426.752 rows/sec., 121.49 MiB/sec.)
Aggregator: Merging partially aggregated blocks (bucket = -1).
Aggregator: Merged partially aggregated blocks. 100 rows, 1.95 KiB. in 3.03e-05 sec. (3300330.033 rows/sec., 62.95 MiB/sec.)
Aggregator: Merging partially aggregated blocks (bucket = -1).
Aggregator: Merged partially aggregated blocks. 100 rows, 1.95 KiB. in 2.22e-05 sec. (4504504.505 rows/sec., 85.92 MiB/sec.) -
-
это, потом это: <Debug> MemoryTracker: Current memory usage (for query): 36.00 GiB.
и потом падает -
А если с обычным uniq? то в логах это есть?
-
-
-
-
-
- 28 August 2021 (23 messages)
-
Подскажите, можно как-то проверить что КХ упирается в background_pool_size, кроме как создания metric_log таблицы.
Периодически стали падать ошибки DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000619929 is executing longer than distributed_ddl_task_timeout (=180) seconds. В запросах типа ALTER TABLE table ON CLUSTER cluster DROP PARTITION 20210827. Хочу понять поможет ли увеличение pool size в таком случае -
Всем привет, кто то может посоветовать что то почитать касаемо cpu и векторных вычислений, как происходят на уровне ядра эти вычисления? Что это в целом значит...
-
Тут рассказывает про оптимизацию в кликхаусе и об них тоже https://www.youtube.com/watch?v=MJJfWoWJq0o&ab_channel=fwdaysОптимизация агрегатной функции в ClickHouse [ru] / Алексей Миловидов
Видео с онлайн-конференции Highload fwdays'20, которая прошла 17 октября 2020 года. Описание доклада: Что может быть проще на следующий запрос для подсчета среднего значения одного столбца? SELECT key, avg (value) FROM table GROUP BY key Но вопрос в том, будет ли этот запрос эффективным? Какой код мог бы достичь максимального быстродействия на широком "железе"? Страница доклада: https://fwdays.com/event/highload-fwdays-2020/review/lets-optimize-one-aggregate-function-in-clickhouse Больше докладов и видео по теме конференции: https://fwdays.com/event/highload-fwdays-2020 Fwdays более 10 лет занимается организацией масштабных конференций для разработчиков таких направлений: JavaScript, .Net, Python, Data Science, PHP, QA, Highload, Architecture, DevOps, Databases. Больше информации про актуальные события: https://fwdays.com/events Подписывайтесь, чтобы первыми узнавать про старт продаж билетов по самой выгодной цене: Facebook: https://www.facebook.com/fwdays Twitter: https://twitter.com/hlfwdaysconf Telegram:…
-
я вот решил на досуге поковырять data skipping indexes. вот есть у меня колонка 'domain' у которой могут быть значения от 0 до 100. и решил я добавить на нее индекс 'set(100)' и материализовал индекс потом. и в итоге получился запрос where domain=X стал выполняться в полтора раза медленнее. Это потому что разброс по значению такой что все равно во всех партах почти встречается X и из-за дополнительного лукапа по индексу стало еще медленнее? потому что сканирует все данные все равно да
-
да.
Но теперь можно сделать прожекшин https://t.me/clickhouse_en/36650 отсортированный по domain и включить туда нужные поля, или сразу посчитать агрегаты и создать group by domain прожекшин -
ага, да про прожекшены знаю - красивое.. и даже работает
-
Spasibo
-
-
Вот тут вся соль от создателя: https://www.youtube.com/watch?v=jJ5VuLr2k5kAmos Bird - kuaishou.com - Projections in ClickHouse - Percona Live 2021
Projections are collections of table columns with different physical layout to speed up queries. They are the main constructs of Vertica. Comment 💬, Share 🔗, Like 👍, and Subscribe ✅ to our channel 📺, and turn on the 🔔 to be alerted to new videos about #OpenSource #Databases... and many other things! https://percona.tv/subscribe At kuaishou.com we have implemented PROJECTIONs support for ClickHouse. It boosts our OLAP analytic capabilities by an order of magnitude. This talk will highlight the design considerations, some implementation details, how it is integrated into #ClickHouse design. Examples and demo of the feature will be shown. You can find more information about #OpenSource #Databases and Percona Database Events in these links 👇👇👇 Watch Percona Live 2021 Talks ⏩ https://percona.tv/PerconaLive2021 Percona Services ⏩ https://per.co.na/Q8eykw Monitor your Database For Free ⏩ https://percona.tv/pmm-yt Kubernetes Operator for Databases ⏩https://per.co.na/kubernetes-operators Connect With us on our…
-
-
Нам очень зашло, самое классное это консистентность данных в рамках парта. Правда отложили до лучших времен, потому как падал materialize на больших партах (
-
ну главные фичи, что при mutation тоже обновляется, и не надо менять имя таблицы.....
-
Привет) Подскажите, при загрузке из csv выдается ошибка , если поле даты пустое : Column 22, name: WORK_DAY, type: Date, ERROR: text ";0;0;2;2;0" is not like Date
разделитель при вставке указан --format_csv_delimiter=";"
Что нужно сделать? -
А поле work_day в формате yyyy-MM-dd?
-
Да
-
Версия кх? Там есть парметр empty... default в современном кх он по умолчанию стоит.
-
Всем привет
Вопрос по поводу как dataframe заинсертить в базу
DDL
create table test(
id1 String,
id2 String,
id3 String
)Engine = MergeTree() order by id1
Pandas
df = pd.DataFrame({'id1':[1,2,3],'id2':[10,20,30],'id3':[100,200,300]})
--**************************
clickhouse.insert_dataframe('insert into dn140692tdi.test(id1,id2,id3) values', df)
TypeError: Unsupported column type: <class 'numpy.ndarray'>. list or tuple is expected.
Что я неверное передаю? -
Какая библиотек? Ответ в трейсе весьма очевидный, ваша либа не поддерживает numpy.array
-
-
Ого че интересное там появилось. Может попробовать обновить numpy?
-
numpy==1.21.1
-
Как клиент создан покажите
-
Подскажите по серваку для кх, сейчас юзаю старый ПК, 4 cores,16gb ram, hdd 160gb - полудохлый.
Упёрся в io, уже даже подобрал сжатие максимальное - все равно, + места маловато.
В день ~5-10gb пишется при активной работе (чтение естественно в огромных количествах)
Вижу 3 решения:
1) докупить ссд на 1 tb
2) докупить пару hdd по 1tb, в raid 0
3) арендовать что-то аналогичное
Вопросы:
1) подводные с raid + кх?
2) стоимость аналогичного vps/vds? кто где арендует?
Пока склоняюсь к паре hdd, дешевле, места прилично - 29 August 2021 (47 messages)
-
Ваше время скорее всего дороже чем этот мусорный "типа-сервер". Лучше запланировать и купить новый. Если же есть желание чего-то в нем проапгрейдить (до тех пор пока не появится настоящий сервер), то поставьте больше памяти (сколько влезет в этот ПК).
КХ сам умеет распределять iops по нескольким дискам без всяких рейдов, а про множественные HDD лучше и не думайте - современный способ добычи iops - это SSD. HDD сегодня имеет смысл только если он 16Tb, и используется для какого-то долговременного хранения типа бекапов.
Арендовать в облаке - хорошая идея, только облачное хранилище на 1Tb стоит весьма прилично. Посмотрите на hetzner - там вроде было дешевле среднего, при достаточно вменяемом сервисе. -
-
в документации кликхаус вполне четко рекомендации написаны с указанием причин
-
- надо оперативку
- надо ссд
- надо вставки делать пакетно не чаще раза в секунду -
Я скорее неправильно обрисовал вопрос, bottleneck на чтение.
Доку я читал, но хочется и ведь нестандартными вещами позаниматься, что бы понимать что кх сможет, а что нет.
Выделять средства на сервер для кх желания нету, так как это песочница для меня, которая денег не принесет, что-то требовательное кроме кх не планируется, поэтому и спросил best practice -
поиграться можно и в облаке. Все дают бесплатный кредит за знакомство: яндекс - 4000р, хетзнер 20 eur, гугл какие-то сотни долларов, амазон не помню.
-
перечисленное в документации и есть бэстпрактис ) а на селекты логично реплики добавлять и их мучать
-
но это уже добавочное железо все равно
-
кх изначально не позиционировался под скорострельный олтп, он для олап нужд идеален
-
попробуйте для песочницы второй гарбэдж-бокс по кладовкам поискать, будет с чем поиграть в горизонтальном масштабировании, это интереснее будет для экспериментов
-
По сути только 2 бюджетных варианта. Взять виртуалку в хецнере. Либо взять самый дешёвый сервак там же. Если юзаете в проде и нет админов, то лучше виртуалку. К тому же там можно примонтировать внешний динамический диск и расширять его при необходимости, а не платить сразу за терабайт.
-
Админы, добавьте уже @ProtectronBot . Это не сложно.
-
я в своё время просто нашёл тюториал в инете по mmx/sse/sse2: https://www.tommesani.com/Docs.html . вообще поиском например по MMX instructions example или sse2 tutorial можно найти очень много лекций
а дальше читал в википедии опиcание новых инструкций, благо что их немного: https://en.wikipedia.org/wiki/X86_instruction_listings#SIMD_instructions
когда ты понял систему, описание конкретных инструкций удобно смотреть в intel intrinsic guide. если есть конкретные вопросы - можешь спросить у меня -
Привет, всем. У меня вопрос, чтобы резюмировать свои познания в clickhouse.
1 шард, 3 ноды, 1 таблица ReplicatedMergeTree. Балансировка нагрузки и балансировка SELECT запросов будет работать?
Спасибо -
на какую ноду прилетит запрос, та и будет обрабаывать,
распараллеливание запроса по репликам в текущем виде не очень работает: https://t.me/clickhouse_ru/231482Denny Crane [Junior support specialist at Altinity (NB,Canada)] in ClickHouse не тормозитmax_parallel_replicas не работает ни у кого, оно не может работать если реплик меньше 10.
-
А эксперименты с distributed таблицами?
-
а они нужны когда шардов несколько
-
Спасибо.
Вариант не подходит.
Но правильно ли я понял, что я просто буду на рандомной ноде дергать запрос и получать консистентные данные? -
инсерты на реплики eventually докатываются, но в остальном да
обычно быстро, если никаких проблем нет -
Последний вопрос, драйвера clickhouse хорошо дружат с TCP-балансерами?
-
Недавно тестировал Netscaler в качестве балансировщика для инсертов. Вышло медленнее, чем при инсерте через одну ноду
-
-
алтинити тренинги проводит в компаниях
-
там серьезный уровень или пересказ доки?
-
серьёзнее некуда :) здесь в чате есть консультанты из алтинити, можете прям их спросить
-
-
>Независимо от того, являетесь ли вы новичком или опытным пользователем, обучение Altinity ClickHouse превратит вашу команду в экспертов ClickHouse.
>Продолжительность - 8 часов (четыре 2-часовых занятия в течение двух недель)
https://altinity.com/clickhouse-training/ClickHouse Training Built For Your Use Case — AltinityDesign high-performance analytic apps, optimize SQL queries, set up secure ClickHouse clusters, replicate data with Altinity’s ClickHouse training series. Lab exercises included!
-
Не пересказ доки, но если у вас уже есть работающий кластер кх то наверно вам они уже будут не так интересны.
Разве что у вас резкое пополнение и нужно обучить молодежь. -
ну там дальше список тем есть, если есть минимальный опыт работы с КХ в кластере, то наврятли поможет
-
А дальше можно:
Прочитать всю нашу кб https://kb.altinity.com/ и блоги https://altinity.com/blog/
Посмотреть все видео от яндекса по внутреннему устройству кх
Купить наш саппорт :) тогда мы будем рассказывать уже всякие особенности КХ применимые к конкретно вашим данным. -
А по стоимости типовых программ саппорта можете сориентировать? Не чтобы оферта, но чтобы можно было хотя бы примерно понять стоимость, скажем, 10 часов консультаций в месяц.
-
Мы не продаем консультации по часам.
У нас оплата за сервера в год, по конкретным ценам к сожалению не смогу сориентировать. (но вы можете написать @AurimasJ ) -
уровень как у наших ответов в чате. Но все же это ДЛЯ тех кто еще только начинает пользоваться КХ и по верхам. 8 часов это мало.
Нормальные курсы которые я слушал у Оракла или HP это неделя - две по 7 часов в день, т.е. где-то 70 часов. И они охватывали какой-то узкий раздел. У КХ будет так же. -
Планируются курсы такого уровня? Или вы о необходимом времени для изучения?
-
скорее нет, не планируется таких курсов.
-
А для селектов есть решения? А то уже каша в голове за последние недели изучения
-
Подскажите, пожалуйста, что нужно изменить в кофигурационном файле, чтобы подсоединиться к кликхаусу на удаленной машине?
Использую для этого командную строку:
➜ bin ./clickhouse client --host=<IP>--port=9000 --user=<NAME> --password=<PASS> -d somedb
ClickHouse client version 21.10.1.7910 (official build).
Connecting to database userdb at <IP>:9000 as user tableau.
Code: 209. DB::NetException: Timeout: connect timed out: <IP>:9000 (<IP>:9000). (SOCKET_TIMEOUT)
--------------
Встречал такой совет: добавить listen host в config:
<listen_host>::1</listen_host>
<listen_host>0.0.0.0</listen_host>
Не помогает. Всегда 209 ошибка. Через какой-либо клиент, например, IDEA соединяюсь. Но в таком случае используется порт 8123. А как использовать 9000 через командную строку?
Спасибо -
sudo netstat -nlpt | grep clickhouse на сервере что показывает
-
и ещё с локального nc -zv YOUR_SERVER_IP 9000
-
sudo netstat -nlpt | grep clickhouse
tcp 0 0 0.0.0.0:9009 0.0.0.0:* LISTEN 637102/clickhouse-s
tcp 0 0 0.0.0.0:8123 0.0.0.0:* LISTEN 637102/clickhouse-s
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 637102/clickhouse-s
tcp 0 0 0.0.0.0:9004 0.0.0.0:* LISTEN 637102/clickhouse-s -
Firewall
-
nc -zv <IP> 9000
nc: connectx to <IP> port 9000 (tcp) failed: Operation timed out -
на локальной машине?
-
ищите проблему в firewall
-
Где сервер клика
-
можно и там и там посмотреть
-
хорошо, спасибо большое
- 30 August 2021 (116 messages)
-
Судя по коду https://github.com/ClickHouse/ClickHouse/blob/98eb619b4b1fc5e9f82790c4810be4e0cbed3fcf/src/Columns/ColumnNullable.h#L65 если значение колонки null, то функции decrypt передается не null, а некоторое специальное значение. Поэтому и возникает ошибка. Проверять на null предварительно я тоже не могу, т.к. IF в моей версии КХ вычисляется нелениво. Какие существуют best practise для хранения зашифрованных данных, если эти данные могут отсутствовать? Шифровать пустую строку кажется неэффективным, с учетом, что ключи часто будут разными.ClickHouse/ColumnNullable.h at 98eb619b4b1fc5e9f82790c4810be4e0cbed3fcf · ClickHouse/ClickHouse
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
подскажите пожалуйста у кого-то получилось запустить CH на macbook m1 в докере?
-
попробуйте прописать платформу, если в docker-compose, то это выглядит приблизительно platform: linux/x86_64
-
не понял в чем проблема применить функцию ifnull
-
Помогите уменьшить размер таблицы system.query_log
Ее размер приблизился по размеру к самим данным в CH.
Как вижу есть 2 пути:
1) Отключить логгирование совсем(что как я понял не есть хорошо)
2) Поменять TTL для таблицы/уменьшить уровень логирования.
Проблема еще в том, что страшно все поломать))
Поэтому в приоритете понизить TTL. Отсюда вопрос - можно ли это сделать для системной таблицы? И если да, то как? -
Retention
-
есть сборка под арм, неофициальная, гоняю ее в тест контейнерах - почти норм
lunalabsltd/clickhouse-server -
я как раз ее нашел, добавил в docker-compose но при билде пишет что нету манифеста(
-
Извините, а поподрбнее можно для новичков?
-
-
ERROR: manifest for lunalabsltd/clickhouse-server:latest not found: manifest unknown: manifest unknown
как с этим боротся? -
Вот так вот сразу гуглом тыкать? Я думал тут обмениваются опытом
-
посмотрите секцию <query_log> в конфиге
-
а также настройки логирования
-
версию конкретную указать, например - тега лейтест нету у них
https://hub.docker.com/r/lunalabsltd/clickhouse-server/tags?page=1&ordering=last_updated -
Конфигурационные параметры сервера | Документация ClickHouse
Конфигурационные параметры сервера builtin_dictionaries_reload_interval Интервал (в секундах) перезагрузки встроенных сл
-
завелось, спасибо!
-
-
Настройки логирования нашел, но может можно запросом уменьшить TTL для этой таблицы?
-
День добрый, подскажите куда копнуть в КХ 21.5, тестирую мутации в партициях и одна мутация висит и ничего не делает, ошибок в логах нет. Партиция небольшая менее 3 Гб. Никаких мерджей и вставок нет.
-
-
Спасибо огромное!
-
в system.mutations parts_to_do не менятеся? latest_fail_reason пусто?
-
там специально мутация по партиции сделана, не меняется, соответственно в списке одна партиция и пустая причина. Свободного места на сервере 5 гигов при размере партиции в 2,9 Г.
-
подскажите, как она может мне помочь?
-
а что мутация делает вообще?
-
подсунуть вместо null какую-то константу, на которой функция не будет падать?
-
alter table transactions_test update test='test4' in partition '2019-09-09' where test='test'
-
привет. я обнаружил проблему в том, что в JSON тип данных не совпадает с ожидаемым таблицей для конкретного поля (Integer -> String). Когда это поправил, импорт перестал сыпать такими сообщениями.
-
это будет все равно, что например шифровать пустую строку, КХ будет выполнять лишную работу по расшифровке
-
Может кто подсказать по max_live_view_insert_blocks_before_refresh. Правильно я понимаю, что они приводит к запросу в оригинальную таблицу каждые 64 вставки? То есть, если запрос вида max(timestamp) FROM original_table выполняется несколько секунд, то каждые 64 блока будет этот запрос на несколько секунд?
Не могу отловить в query_log ничего связанного, туда записываются действия LV? -
-
Место резервируется чтобы всякие системные вещи, бегущие от рута, не сломались когда юзерские программы съедят все место на диске
Как по мне, так пользы в этом мало, потому что юзерские программы так-то и определяют смысл существования сервера. С другой стороны, какой-то резерв иметь надо потому что на систему с полностью забитым диском иной раз может быть невозможно залогиниться
С третьей стороны, размер резерва волновать не должен, потому что надо мониторить и предпринимать действия гораздо раньше чем стрельнет резерв -
-
-
Всем привет. Делаю запросы к КХ в python с помощью from clickhouse_driver import Client. Если я создаю один экземпляр Client и с помощью него делаю все запросы к КХ, то КХ начинает возвращать ошибку. Если же я создаю экземпляры Client для каждого запроса к КХ, то все работает без ошибок, но, думается, такое решение может привести к проблемам, когда запросов станет много. Кто-нибудь сталкивался с такой проблемой? Хотелось бы понять причину такого поведения и как корректно устранить эту проблему.
-
Текст ошибки: File "/code/geo/repositories/measurements.py", line 72, in get_AQI_distribution
data = clickhouse_client.execute(
File "/usr/local/lib/python3.8/site-packages/clickhouse_driver/client.py", line 248, in execute
rv = self.process_ordinary_query(
File "/usr/local/lib/python3.8/site-packages/clickhouse_driver/client.py", line 446, in process_ordinary_query
return self.receive_result(with_column_types=with_column_types,
File "/usr/local/lib/python3.8/site-packages/clickhouse_driver/client.py", line 113, in receive_result
return result.get_result()
File "/usr/local/lib/python3.8/site-packages/clickhouse_driver/result.py", line 50, in get_result
for packet in self.packet_generator:
File "/usr/local/lib/python3.8/site-packages/clickhouse_driver/client.py", line 129, in packet_generator
packet = self.receive_packet()
File "/usr/local/lib/python3.8/site-packages/clickhouse_driver/client.py", line 143, in receive_packet
packet = self.connection.receive_packet()
File "/usr/local/lib/python3.8/site-packages/clickhouse_driver/connection.py", line 490, in receive_packet
raise errors.UnknownPacketFromServerError(
clickhouse_driver.errors.UnknownPacketFromServerError: Code: 100. Unknown packet 4 from server None:None -
все-таки дело было в свободном месте.
-
как поняли?
-
после рестарта КХ в system.errors появилась ошибка по месту
-
Мультитрединг?
-
интересно как без рестарта понять) Вы видимо размер парта смотрели в сжатом видите, а в разжатом больше 5Гб получалось
-
да, парт был сжат, тоже к этому выводу пришел. желательно иметь в 4 раза больше свободного места, чем размер парта, которому делаешь ALter\мутацию
-
это зависит от степени сжатия данных наверное, data_uncompressed_bytes надо смотреть в system.parts
-
-
для КХ пользую DBeaver и там настройки внутри соединения идут
-
-
Я не использовал прикладной мультитрединг, запросы к КХ отправляет Джанго.
-
если запросы в джанго выполняются в разных потоках с одним инстансом клиента, то проблема именно в этом: https://clickhouse-driver.readthedocs.io/en/latest/quickstart.html#async-and-multithreading
-
-
Всем привет
Помогите разобраться почему не не отрабатывает right join (((
drop table tt1
drop table tt2
create table tt1(app Int64,insert_id String) Engine =MergeTree() order by (app,insert_id);;
create table tt2(app Int64,insert_id String) Engine =MergeTree() order by (app,insert_id);;
insert into tt2(app,insert_id) values(302524,'c6bf67d2-436e-48c1-8b26-bc3bc2870444')
insert into tt1(app,insert_id)
select
t2.app,
t2.insert_id
from tt1 as t1
right join tt2 as t2
on t1.app = t2.app
and t1.insert_id = t2.insert_id
where t1.app = 0
insert into tt1(app,insert_id)
select
t2.app,
t2.insert_id
from tt1 as t1
right join tt2 as t2
on t1.app = t2.app
and t1.insert_id = t2.insert_id
where t1.app = 0
302524 c6bf67d2-436e-48c1-8b26-bc3bc2870444
302524 c6bf67d2-436e-48c1-8b26-bc3bc2870444
select * from tt1 -
Если в обоих таблицах меняю движок на Log,то работает
Может какае-то загвоздка в движке -
SELECT
now64(),
fromUnixTimestamp64Milli(reinterpretAsInt64(now64()) - 1) -
при создании таблицы было использован ON CLUSTER. Если после этого от кластера решили отказаться, то как указать у уже созданной таблицы новый адрес единичного-нод сервера (без кластера)?
-
спасибо
-
ON CLUSTER это syntax sugar для выполнения одного запроса сразу на нескольких серверах, после того как вы выполнили эту команду вас ничего не держит. (если вы не используете Replicated движки)
-
всем привет.
подскажите по оптимизации поиска в кх:
есть две таблицы mergetree с текстовыми полями, надо искать совпадения этих полей между собой. таблицы постоянно увеличиваются, строк там потенциально миллиарды.
есть два вопроса:
1. поиск планирую делать через where, может есть что-то лучшее для поиска дубликатов?
2. есть ли смысл вводить доп поле, по которому делать prewhere? например последний индекс поля второй таблицы, либо же это излишне, т.к. два where все равно будут бегать по всем строкам? -
Джентльмены, помогите пожалуйста с идиотской проблемой.
Мне нужно скопипастить пачку таблиц на нескольких нодах. Версии на нодах несколько разные - где-то постарее, где-то поновее.
Там, где старые - show create table показывает описание в одну строку. Где новые - в format Pretty.
По технологическим причинам мне надо увидеть описание именно в одну строку (в терминал портянка Pretty не влезает).
Как clickhouse-client заставить выводить данные без "\n" ? -
-
можешь указать в запросе нужный формат
-
у вас в таблице t1 ничего нет, однако вы указываете t1.app = 0 в where, а не в ON. собственно поэтому записей на выходе и нет
-
Я уже все доступные перетыкал - ни один не показывает, как надо.
-
на 1 итерации нет,затем есть 2 инсерта (на первом ожидается вставка,на втором нет)
по итогу 2 раза вставляется -
можно попробовать что-то типа:
SELECT create_table_query FROM system.tables WHERE name = 't1' -
О! Оно!
Спасибо большое. -
так это же идентичные запросы, почему в первом случае ожидается вставка, а во втором нет? Спойлер: после третьего запуска вставка тоже произойдёт.
-
добавьте SETTINGS join_use_nulls = 1 и тогда у вас будет ожидаемое поведение - не пройдёт ни одного инсерта.
-
INSERT user1 action1
INSERT user1 action2
INSERT user1 action3
INSERT user2 action1
INSERT user3 action1
хочу в КХ в таблице вот такие данные хранить, а action[N] хочу чтобы агрегировалось в поле и там были вроде json
чтобы я потом взяз из базы юзера и узнал какие действия он делал
КХ в такое умеет? -
user1 [action1, action2, action3]
вот такое чтобы лежало хочу после агрегации (мержа) в 1 поле -
-
а сагрегировать эти данные КХ сумеет?
-
он сможет на каждый инсерт обновлять значение массива у user1?
-
Ребята опытнее мб подскажут. КХ сам навряд ли такое сделает, это триггер какой-то, а про такие надстройки в КХ я не слыхал.
Вьюха (в т.ч. и материализованная) сможет, разве что.
Лучше конечно на стороне инсерта пихать массив. -
Я на самом деле зашел чуть подальше простых обезъянних наливаний данных через инсерты и чет совсем нетривиально все пошло. А написанная птичьим языком дока, где "Бери это и засунть сюда и все полетит" - совсем не помогает.
-
выглядит будто вы хотите Nested структуру вставить
-
Всем привет.
Подскажите, пожалуйста, есть ли где-то best practice по использованию chproxy, возможно сравнение перфоманса с балансировкой nginx. Сколько ресурсов обычно ему хватает? Кластер 10 нод, поток трафика около 1.8 Гбит в пике. -
вставляете в таблицу примерно вот в таком виде. На неё вешаете MV, в котором делаете аггрегацию по юзеру. aggregation function у вас будет groupArray или если надо хитрее, то что-то тиа groupArray((ts,action))
-
-
а само поле какого типа держать?
-
-
если в оригинальной таблице action String, то в dest таблице будет actions Array(String)
-
groupArray((ts,action)) а что имеете в виду?
-
select * from system.columns where table = ‘…’
-
select user,groupArray(action) as actions from table group by user;
-
тяжко
-
все таки убеждаюсь, что лучше логику делать кодом, все эти танцы и извращения это путь к проблемам
-
а разве не groupArrayState надо делать? или КХ сам сможет помержить groupArray?
-
спасибо
-
нет. Такие штуки будут сильно быстрее работать в оптимизированном C++ коде КХ, чем вы их напишите сами. Почитайте про аггрегатные функции - https://clickhouse.tech/docs/ru/sql-reference/aggregate-functions/Введение | Документация ClickHouse
Агрегатные функции Агрегатные функции работают в привычном для специалистов по базам данных смысле. ClickHouse поддержив
-
groupArray делает массив из всех значений поля для группы, State - это если вам нужно потом сложить что-то с чем-то удобным образом
-
ну тут нужны серьезные объемы, чтобы увидеть, что го начинает подтупливать
сотни тысяч в секунду -
да, без объемов смысла особого нет. Но код на SQL будет лакониченне - строки вместо десятков строк. Надо просто повернуть голову на другой стиль программирования
-
Меня парит, что от кх разит функциональщиной. Прям вот смотрю на эти агрегацци и прям скала-хаскель. После процедурных очень сложно.
-
вы не очень понятно описали задачу, можно понять неправильно. вобще-то строгое совпадения двух полей (даже текстовых) в разных таблицах решается через join, для которого существуют разные оптимизации. Но если дубликаты - это это строки в одной таблице - это иная задача. И в любом случае - полный проход по миллиардным таблицам - это всегда плохо, надо как-то избегать такого - например делать обратные индексы (скажем на основе MV/projectons), или как тут недавно обсуждалось - битмапами.
-
ага, а мне так понравилось! Вот прямо душа отдыхает после этих го/питонов
-
добро пожаловать в мир sql
-
А что сложного, разбираетесь и делаете
-
тем более тут уже выше обсуждали, что за 8 часов можно узнать у КХ почти всё, а для оракл уже десятки часов требуются, чтобы что хоть что-то начинать понимать
-
Не понял причём тут оракл) там человек вроде про go пишет
-
Мне вот кажется что в жизни среднего разработчика языки высуого уровеня нужны только для каркаса, а логику лучше писать в sql
-
мне казалось, что он говорил про кликхаус. но из-зато того что не использует функцию "ответить" все сообщения смешались в кашу.
-
Возможно)
-
интересно, а SQL - язык какого уровня? Запредельно сверхвысокого? :)
-
да, надо искать строгое совпадение двух полей в разных таблицах. join как раз подойдет. но как он себя поведет на миллиардных таблицах? проверка по сути нужна не очень часто, примерно раз в неделю и длительность выполнения не очень критична в разумных пределах...
-
Ну не очень выразился да.
-
при джойне правая таблица помещается в память. если памяти не хватит, тогда всё, приплыли
-
Так вроде merge join завезли
-
С какой то версии
-
круть. и как оно? работает сильно медленнее?
-
А я хз, я давно не пользуюсь кх, тока чатик читаю
-
Спасибо!
-
-
всем привет, как то можно отдебажить запрос?
такую ошибку пишет при создании вьюхи
error: code: 43, message: Illegal type AggregateFunction(max, UInt32) of argument of aggregate function max because the values of that data type are not comparable -
судя по тексту ошибки вы передаёте в функцию max() не Int, а AggregateFunction. Проверяйте там ну и покажите как создаёте
-
спасибо, разобрался
-
ну так....
SELECT formatReadableQuantity(count())
FROM calls
│ 1.53 billion │
SET join_algorithm = 'partial_merge'
SELECT count()
FROM calls AS c1
INNER JOIN calls AS c2 ON c1.client = c2.companyTelnum
↓ Progress: 2.28 billion rows, 18.27 GB (404.36 thousand rows/s., 3.23 MB/s.)
│ 2590808638539 │
1 rows in set. Elapsed: 10954.815 sec. Processed 3.06 billion rows, 24.50 GB (279.57 thousand rows/s., 2.24 MB/s.)
Два с половиной часа.
Сервер какой-то более-менее приличный, поля не в индексе и взяты от балды. Зато работает без каких-то особых усилий. Если раз в неделю на ночь, то пойдет. А если ещё немного подумать над оптимизацией, то и подавно. Так что можно джойнить миллиарды. - 31 August 2021 (96 messages)
-
Всем привет.
В zookeeper таблицы должны иметь одинаковые названия?
Если делать одинаковые названия, то выходит ошибка "Таблица уже существует". А если разные имена таблиц для репликации таблицы CH, то репликация не работает должным образом -
Не должны
-
Ну ты можешь сделать дистрибьютед таблицу и потом с префиксом repl реплицированную
-
-
Есть три ноды c путями для zookeeper таблиц:
/clickhouse/tables/{cluster_name}/1/database/{database_name}/table_name/{table_name}/replicas/{node_name}/
Данные размазались только на 2/3, и ошибка Can't get data for node ... node doesn't exist -
по макросы node_name только уникальная
-
-
Разве ZK не должен был создать таблицы
-
Создал ReplicatedMergeTree('/clickhouse/tables/{cluster_name}/1/database/{database_name}/table_name/{table_name}/replicas/{node_name}/')
-
при двухнодной схеме работало, при трехнодной схеме похерилось
-
У вас какой конфиг? 3 реплики?
-
один шард, три реплики
-
Не должен, надо руками на 3 реплике создать
-
Один и тот же код на 3х машинах выполнить и все будет ок.
-
Но на второй реплике сам создался. Алгоритм был таков:
- на первой ноде перевел таблицу на ReplicatedMergeTree
- на второй ноде создал таблицу эту самую
- проверил, zk создал таблицу у себя
- данные со второй ноды были доступны
- повторил предыдущие действия на третьей ноде
В итоге, на третьей ноде нет данных. Третья нода стала лидером зукипера, первые две ноды в ридонли -
Сделал, но по каким-то причинам, это не сработало как ожидалось
-
0 байтов на третьей ноде. А на первых двух данные совпадают
-
-
Лишнего пробела нет? В нужной секции стоит?
-
-
#вакансия #архитектор #удаленно #hadoop #greenplum #postgres #clickhouse
Вакансия: Technical Account Manager
Город: удаленно или Москва (м.Алексеевская)
Компания: Arenadata https://www.youtube.com/watch?v=RKZ7Chty98Y&t=38s
Заработная плата: от 300 тыс. руб. на руки и выше
Arenadata – ведущий российский разработчик платформы управления данными. Наши решения строятся на технологиях open-source с открытым исходным кодом. Мы являемся одним из крупнейших коммитеров и вносим вклад в развитие таких проектов как Greenplum, Apache Big Top, Apache Kafka, Apache NiFi, Yandex ClickHouse. А еще мы вендоры и внедряем наши продукты в крупнейшие российские компании.
Мы ищем человека, который станет единой точкой входа от ключевого заказчика. Он должен отвечать на архитектурные вопросы, делать ревью ландшафта или отдельных систем, проводить архитектурный надзор на отдельных решениях, понимать как продукты работают, давать комментарии на техническом уровне.
Обязанности:
- Декомпозиция технических требований, оценка трудозатрат;
- Создание архитектуры прикладных решений на базе opensource-продуктов (в первую очередь продуктов Arenadata);
- Подготовка или ревью соответствующих технических и эксплуатационных документов;
- Функциональное руководство аналитиками и инженерами (в паре с РП, на котором будет проектное руководство);
- Принятие решений по ходу проекта совместно с РП, если такая необходимость возникнет.
Требования:
- Опыт работы с одной или несколькими системами: Greenplum, Hadoop (HDFS, Yarn, Hive, Spark, HBase), Kafka, Clickhouse.
- Знание принципов построения архитектуры DWH/BDW, Data Lake, Стриминговых платформ.
- Опыт построения решений в области Big Data.
Условия:
- Официальное трудоустройство по ТК РФ с белой зарплатой.
- Возможность работать 100% удаленно или в офисе (на выбор), гибкий график.
- Возможность участия в крупнейших российских и международных ИТ-конференциях, сертификация за счет компании.
- Корпоративная скидка на изучение английского.
- 100% оплата больничного до уровня месячного дохода, независимо от стажа и срока работы в компании.
- Хороший ДМС со стоматологией.
- Обеспечение техникой для работы (ноутбук, монитор).
✉️ Писать можно в телеграм @pankina_hr или на почту poe@arenadata.ioКорпоративная платформа данных Arenadata Enterprise Data Platform (EDP)Данные трансформируют мир и лежат в основе AI-экономики. Arenadata Enterprise Data Platform, разработанная на основе передовых Open Source технологий, обеспечит быстрое, масштабируемое и отказоустойчивое управление данными для цифровой трансформации любого бизнеса или государственной организации. Платформа предусматривает полный цикл управления данными - от хранения до предикативной аналитики. Подробнее в нашем видео.
-
День добрый, может кто нибудь подсказать по получению данных из kafka с avro registry? Получаю такую ошибку - DB::Exception: avro::Exception: Invalid data file. Magic does not match. Не совсем понимаю что это может значить. В apicurio registry схема есть, в kafka топик тоже. https://pastebin.com/Y4kTr88r Подтолкните пж, а то не знаю куда копать.2021.08.31 11:40:27.635292 [ 125920 ] {5aa9497b-94f1-4e32-b7cb-8139b56b5aa5} <Er - Pastebin.com
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
Ребят, привет! Нужен совет.
Пишем данные из кафки в КХ
Уже создано около 25 кафка-табличек и гора матвью на них.
И вото нужно поменять кластер кафки. Можно ли в КХ как-то глобально поменять в этих табличках kafka_broker_list?
Или нужно все таблички пересоздавать с новыми брокерами в конфиге? -
кто-нибудь подрубался с помощью яндексовского докерфайла clickhouseclient к remote машине?
-
добрый день, подскажите, пожалуйста
удалили столбцы в таблицах (сначала в обычных, потом в дистрибьютед), но забыли выключить туда вставку со старыми полями, посыпались ошибки, вставку выключили
но подвис один запрос от юзера replication на вставку в обычную таблицу и продолжают сыпаться ошибки
executeQuery: Code: 16, e.displayText() = DB::Exception: No such column...
если смотреть по query_log, изначальный запрос на вставку в distr таблицу прошел успешно
можно как-то прибить этот процесс? запросы продолжают сыпаться, query_id у них разные
спасибо -
Я 0 ставлю. Резервирование давно не нужно. Вы сможете залогинится и сделать sudo даде с 0 места
-
Нету
-
если один поток и синхронное выполнение то один коннект, если нет то много
-
Так поточно мутация работает. Не разжимается парт на диск вообще. Колонка одна разжимается блоками в памяти мутирует и пишется на диск сжатая
-
Можно вам задать вопрос? Мутации не разжимают данные, а прям на сжатых работают?
-
a thread reads one compressed block into memory, decompress it, mutates, compresses, writes the new mutated block to a new part.
-
👍🏻👍🏻 спасибо
-
если данные не нужны то просто удалить bin файлы из каталога distributed таблицы
Если нужны то можно bin файл прочитать селектом from engine... дальше не помню -
Все drop/create. Сделайте dns запись и внесите туда все брокеры. Этот список это же бутстрап. Дальше клиент кафки использует дисковери
-
спасибо 🙏
-
Но старый же парт какое то время остаётся лежать на диске? 8 минут вроде бы
-
Ап, может кто знает что подкрутить можно
-
и что? На самом деле это вообще не проблема, место занимает только одна мутировавшая колонка.
-
чего? это же специально сделано так.
-
ну условно делается что-то тяжёлое с таблицей t1 on cluster минут на 20, в это время другой процесс запускает drop partition on cluster на t2, и он отваливается по таймауту и падает пайплайн у нас из-за этого, хотя drop это простая операция. Получается только отказываться от on cluster и запускать вручную на шардах?
-
эээ , при чем тут oncluster ? покажите с какой ошибкой падает ваш drop
-
сделали drop/create
спасибо -
DB::Exception: Watching task /clickhouse/task_queue/ddl/query-0000620939 is executing longer than distributed_ddl_task_timeout (=300) seconds. There are 1 unfinished hosts (0 of them are currently active), they are going to execute the query in background (version 21.3.15.4 (official build)) (from 10.64.128.14:54140) (in query: ALTER TABLE analytics_adjust_events_tmp_shard ON CLUSTER ch_shards DROP PARTITION 20210825
-
Подскажите, пожалуйста. Есть вот такой запрос поверх таблицы SummingMergeTree:
select ItemGalleryId, ItemThumbId, sum(Clicks) as Clicks, sum(Views) as Views, if (Views>0, Clicks/Views, 0) as Ctr from stat_rotation_events_search_by_key sres where ZoneSearchKeywordTranslation ='some search query' and ZoneGroup='some group' GROUP BY ItemGalleryId , ItemThumbId HAVING Views>25 order by Ctr desc Limit 1000
Как мне сделать аналог count(*) чтобы знать, сколько таких записей всего? -
при этом видно что пока первый ddl не закончит работать, в ЗК в пути /clickhouse/task_queue/ddl/query-0000620939/active пусто, обработка запроса даже не начинается
-
ну on cluster тут ни при чем. Без oncluster, drop будет также ждать, потом ваш клиент отвалится по таймауту.
TTL можно менять моментально если надо, но тогда не будет пересчитываться TTL info -
не правда. Все вообще не так
-
так без on cluster drop проходить если запустить на каждой ноде отдельно
-
и зависнет на какой-нибудь где идет alter table modify ttl
-
даже если мы делаем drop в другой таблице?
-
ну с window function в два клика
-
нет.
DDDL точно также не зависят от друг друга. DDDL это тупой хелпер, он делает ровно тоже самое что вы руками выполняя на каждой ноде -
Прошу прощения, я все еще не понял.
Вот у меня получается результат
┌─ItemGalleryId─┬─ItemThumbId─┬─Clicks─┬─Views─┬──────────────────Ctr─┐
│ 3318834 │ 12720993 │ 2 │ 35 │ 0.05714285714285714 │
│ 3489146 │ 14903948 │ 2 │ 37 │ 0.05405405405405406 │
то есть статистика по каждой паре ItemGalleryId, ItemThumbId
И мне нужно понять, сколько есть таких пар, чтобы знать, на сколько страниц рисовать пагинацию -
я понял что вы про ORDER BY Ctr DESC Limit 1000
вы спрашиваете сколько было до limit ? -
-
Как раз для того, чтобы формировать Limit offset, мне это и нужно: знать, сколько всего записей, чтобы разбить на группы по 100
-
ха, я нашел баг в WF, не получится
-
извините, не понял, нет - не зависнет? Когда висит запрос drop partittion on cluster я могу зайти на каждый шард и выполнить drop вручную
-
привет, подскажите пожалуйста, в чем проблема. Создал 2 базы
CREATE DATABASE dictionary ON CLUSTER nodes ENGINE = Atomic;
CREATE DATABASE test ON CLUSTER nodes ENGINE = Atomic;
сделал пользователя и дал ему прав на создание таблиц в этих базах
SHOW GRANTS FOR migrator
Query id: 0d1e6066-2ffc-48b2-8204-5d89fc5a9e59
┌─GRANTS FOR migrator─────────────────────┐
│ GRANT public_reader, writer TO migrator │
└─────────────────────────────────────────┘
SHOW GRANTS FOR writer
Query id: 5f3d5831-cb91-4dab-b402-834b80fc0c4f
┌─GRANTS FOR writer──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ GRANT SHOW, SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, CREATE DICTIONARY, DROP, TRUNCATE, OPTIMIZE, dictGet ON test.* TO writer │
│ GRANT SHOW, SELECT, INSERT, ALTER, CREATE TABLE, CREATE VIEW, CREATE DICTIONARY, DROP, TRUNCATE, OPTIMIZE, dictGet ON dictionary.* TO writer │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Но почему то в схеме test получается создать таблицу, а в dictionary -нет ошибка Not enough privileges. To execute this query it's necessary to have grant CREATE TABLE ON dictionary.test Как это можно подебажить? -
а бага лечится (order by)
select * from (
( select *, count() over () cnt from
( select * from numbers(10000000) )
)
) order by number limit 3
┌─number─┬──────cnt─┐
│ 0 │ 10000000 │
│ 1 │ 10000000 │
│ 2 │ 10000000 │
└────────┴──────────┘ -
dddl запросы выполняются независимо, там нет никакой очереди.
-
select * from (select *, count() over () cnt from (select ItemGalleryId, ItemThumbId, sum(Views) as Views from stat_rotation_events_search_by_key sres where ZoneSearchKeywordTranslation ='some query' and ZoneGroup='some group' GROUP BY ItemGalleryId , ItemThumbId HAVING Views>25))
Вот так вот? Добавляет count() отдельной колонкой -
да
-
Спасибо, так меня вполне устроит
-
Пардон, напоминаю про https://github.com/ClickHouse/ClickHouse/discussions/28270. Если долго писать, можете тезисно объяснить, где неправильно?Exactly-once write semantics · Discussion #28270 · ClickHouse/ClickHouse
Hi Team, I'd like to understand the proper way to ensure exactly-once ingestion into a sharded deployment of ClickHouse (multiple shards, with the same ReplicatedMergeTree tables configured...
-
Спасибо. А не знаете что под капо том у этой настройки вообще? Есть ли смысл заводить отдельного юзера на запросы без оконных функций?
-
О. Я даже не знал что есть discussions. Сегодня отвечу.
-
Ну в WF пока реализованы не на 100%. Это пока экспериментальная фича. Чтобы случайно пользователи не могли ей пользоваться на проде (из табло например), она выключена по умолчанию.
-
-
Хммм.. В описании вроде как написано что обратная совместимость может страдать с последующими релизами у WF, а то что вы говорите по сути означает что опасно просто даже случайно запустить.
-
https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aopen+is%3Aissue+label%3Acomp-window-functionsIssues · ClickHouse/ClickHouse
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
только в where написать как вариант
-
Смотря на что between. Если там даты без времени, например, я делал range дат и join с =
-
спасибо
-
дата со временем
-
И без постоянного шага?
-
ага(
-
Asof join не поможет?
-
ну я вот не знаю норм ли использовать его)
-
-
-
Ни разу не пользовался, не знаю
-
Случайно мне удалось найти некую замену этому методу. В клиенте php есть метод countAll(), который, по описанию, отдает rows_before_limit_at_least (If the query contains GROUP BY, rows_before_limit_at_least is the exact number of rows there would have been without a LIMIT - по мануалу).
То есть о нас, кажется, уже позаботились) -
И я говорю про любые экспериментальные фичи. Их много. Skip indexes были год экспериментальными, потом убрали этот флажок.
-
Да, но это не совсем правда. Если оптимизация groupbyinorder включена то результат может быть неверный.
-
добрый вечер! в CH есть какие-либо возможности имперсонации, чтобы, например, select внутри view выполнялся от другого юзера? не хочется давать доступ на чтение к исходной таблице, хотелось бы ограничиться только правами на Select from view
-
Добрый вечер, подскажите, пожалуйста, есть ли возможность произвести select из таблицы, явно указав партицию, которая указывалась при создании таблицы mergethree? (PARTITION BY toYYYYMMDD(dt))
В документации не нашёл -
Партиции по дате выбираются автоматически, если Вы делаете SELECT ... WHERE dt = '1234-56-78' или похожее
-
Нету.
-
Можно. Но не нужно. (Yuran правильно ответил)
Where _partition =. ищите тут в чате. Есть виртуальные поля, у них имя начинается с подчеркивания. -
подскажите плз,
при вставке данные с другого сервера в формате:
INSERT into $db.$tableName SELECT * FROM remote('123.123.2.1', $db.$tableName, 'default', 'passs')";
вываливается ошибка
<Error> DynamicQueryHandler: Code: 491, e.displayText() = DB::Exception: URL "123.123.2.1" is not allowed in config.xml, Stack trace (when copying this message, always include the lines below):
в чем может быть проблема? -
Поиск по GitHub показал такие поля только упоминаются только в Kafka engine, для MergeTree есть что-то подобное?
-
да, их много, и вы плохо ищете
https://t.me/clickhouse_ru/196828
_part _partition_id _table ... -
спасибо
-
на самом деле вам это не нужно, partition pruning все делает за вас.
они нужны только для отладки внештатных ситуаций -
>ClickHouse release 21.4.1
>In this version, empty <remote_url_allow_hosts></remote_url_allow_hosts> will block all access to remote hosts while in previous versions it did nothing. If you want to keep old behaviour and you have empty remote_url_allow_hosts element in configuration file, remove it.