- 01 June 2021 (197 messages)
-
SELECT engine FROM system.databases WHERE database = 'your_database'
-
Написать optimize table, после этого дубли удаляются
-
Коллеги, в каком файлике нужно allow_experimental_window_functions = 1 установить. В настройках не нашел
-
в /etc/clickhouse-server/users.d/allow_experimental_window_functions.xml
<yandex>
<profiles><default><allow_experimental_window_functions>1</allow_experimental_window_functions></default></profiles>
</yandex> -
-
Если этого файла нет, его нужно создать?
-
Файл создал, все работает! Спасибо!
-
служба поддержки чего?
она там БОЛЬШАЯ вообще то, продуктов дофига
вас что конкретно интересует?
Лучше всего через формы обратной связи связываться или по 8-800 если есть для продукта такой сервис -
Да connect странно себя ведет, видимо кто-то обновление закинул и через раз пишет "доступа нет", в связи с чем, все DNS записи слетели и сервисы попадали :Т
-
Служба поддержки - Яндекс 360 для бизнеса. Справка
Если вы не нашли ответа на свой вопрос в Справке, напишите нам.
-
-
ну или тупо вот сюда напишите
/>business@support.yandex.ru -
движок бд там старый, Ordinary. В чем то разница здесь с Atomic ?
-
-
про exchange таблиц, uuid, "ленивое" удаление, я понимаю. Меня интересует в контексте переименования колонок. Есть разница?
-
переименование колонок, файловая операция
в контексте Atomic ВСЕ ALTER должны быть не блокирующие он для этого и создан
для Ordinary некотоыре ALTER требующие эксклюзивных локов на ФС блокирующие -
-
ну как вариант какой нибудь hard links с новыми именами и потом удаление оригинала...
но я деталей если честно говоря не знаю, надо в исходниках копаться -
-
ну я тоже не видел =) но если ALTER TABLE RENAME COLUMN не атомарны и блокирующие, то это странно
-
спасибо, а подскажите, какая строка останется, последняя добавленная или наоборот первая ? можно как то этим управлять при слиянии ?
-
там в настройках replacing mergetree есть возможность устанавливать версию, по которой будет сравнение (-1, 1) и соответственно старая версия будет затиратся. Но мне такого не нужно было/
Последнюю в выборке, если ver не задан. Под выборкой здесь понимается набор строк в наборе кусков данных, участвующих в слиянии. Последний по времени создания кусок (последняя вставка) будет последним в выборке. Таким образом, после дедупликации для каждого значения ключа сортировки останется самая последняя строка из самой последней вставки.
С максимальной версией, если ver задан. -
по версии
-
ReplacingMergeTree | Документация ClickHouse
ReplacingMergeTree Движок отличается от MergeTree тем, что выполняет удаление дублирующихся записей с одинаковым значени
-
но если она не указана то последнюю вставленную строку оставляет ?
-
а есть ли возможность добавлять коммент к колонке при создании, а не через альтер ?
-
спасибо, понял!)
-
почитайте лучше выше ссылку на доку. там одна страница. все вопросы сразу отпаддут
-
да, уже прочел)
-
не подскажете где я ошибаюсь, плз?) пишу optimize как в доке с указанием столбца по которому произвести дедупликацию, но вылазит ошибка
-
Добрый день! Подскажите, пожалуйста, а кто и как менеджит у себя схемы данных в ClickHouse при активной разработке, больше интересует интеграция с каким-нибудь java тулингом типа Flyway или Liquibase. Видел что у в Flyway есть MR, созданные сообществом, но что-то сами разработчики Flyway кота тянут за одно причинное место. Если кто-то использует пропатченную версию Flyway, вы это у себя отдельно собираете?
-
у вас версия clickhouse старая
-
Так, судя по всему вопрос в чате поднимался неоднократно, но к единому мнению так и не пришли
-
использовали https://github.com/golang-migrate/migrate , но патчили ееGitHub - golang-migrate/migrate: Database migrations. CLI and Golang library.
Database migrations. CLI and Golang library. Contribute to golang-migrate/migrate development by creating an account on GitHub.
-
-
https://clickhouse.tech/docs/en/sql-reference/statements/system/#query_language-system-stop-fetches Подскажите, STOP FETCHES стопнет на той реплике где вызвана команда или на всех репликах?SYSTEM | ClickHouse Documentation
SYSTEM Statements The list of available SYSTEM statements: RELOAD EMBEDDED DICTIONARIES RELOAD DICTIONARIES RELOAD DICTI
-
И запаузит он их или отменит
-
ну по моему предельно ясное сообщение об ошибке, разве нет?
-
В прошлых версиях такого не наблюдалось. В Changelog так же ничего критичного не нашел.
-
ну может вам раньше очень везло и прошлый альтер выполнялся быстро
-
100% не уверен но IMHO он просто перестанет новые парты фетчить, старые если начал, то IMHO дофетчит и стоп будет только на той реплике на которой запустили...
-
Всем привет! Кто-нибудь знает сервисы, для репликации данных поддерживающие множество субд?
-
Connectors | Data Virtuality
Use Data Virtuality connectors to access and centralize data from 200+ data sources, target storages and Business Intelligence tools.
-
А полностью опен соурс есть?)
-
https://symmetricds.org
но у нее поддержки clickhouse нет
вам откуда и куда надо реплицировать?
почему не берете более узкое решение какое нибудь?SymmetricDS | Open Source Database ReplicationSymmetricDS is an asynchronous database replication software package that supports multiple subscribers and bi-directional synchronization.
-
Link
Debezium is an open source distributed platform for change data capture. Start it up, point it at your databases, and your apps can start responding to all of the inserts, updates, and deletes that other apps commit to your databases. Debezium is durable and fast, so your apps can respond quickly and never miss an event, even when things go wrong.
-
Всем привет!
Может кто-то использовал S3 в качестве cold storage? Есть вопрос: можно ли заставить кх автоматически создавать подпапку для каждой таблицы? В данный момент подпапка прописана в endpoint в конфиге, но желания создавать отдельный storage_configuration для каждой таблицы никакого нет, ибо как это всё потом поддерживать для большого числа таблиц — не очень понятно. -
Вы используете s3 диск?
Он сам должен создавать пути для каждой таблицы, разве нет? -
да не совсем, у меня в endpoint указано https://my-bucket-endpoint.amazonaws.com/cold ; заглядываю в cold — там куча партов лежит, без подпапки
-
В каком виде?
Может вы используете zero copy replication? -
отменяет текушие, при старте начинает их заново качать
-
У меня есть конфиг config_s3_cold.xml, в нём storage_configuration.disks.external — определён диск с типом s3, а также storage policy external_cold для хранения холодных данных, где указано два диска (локальный и s3). Далее я создал табличку с TTL date_field + INTERVAL 6 MONTH TO VOLUME 'external', начал заполнять её данные — в cold набросало партов. Вроде и логично, а хотелось, чтобы кх сам создал подпапку для таблицы
-
Привет!
Пытаюсь использовать postgresql (https://clickhouse.tech/docs/ru/sql-reference/table-functions/postgresql/) но в ответ ClickHouse мне говорит: Code: 46. DB::Exception: Received from <host>. DB::Exception: Unknown table function postgresql. Версия ClickHouse 20.8. Правильно я понимаю, что функция postgresql доступна только в ClickHouse 21.x ?postgresql | Документация ClickHousepostgresql Позволяет выполнять запросы SELECT и INSERT над таблицами удаленной БД PostgreSQL. Синтаксис postgresql('host
-
да, с 21.2
-
Спасибо.
-
Хм, надо будет посмотреть, но наверное это норм, кх сгенерирует им непересекающиеся названия
-
охотно верю, но в плане менеджмента это головная боль :(
Есть, конечно, мысль создавать конфиг с кредами, а затем попробовать повозиться с <incl> и <replace> для того, чтобы конфиги для табличек генерились автоматом, но имхо реальная картина должна быть прекраснее, чем вот эта -
Привет.
Подскажите пожалуйста. Мне нужно что-то вроде facets.
Например, я хочу найти уникальные значения колонки из моей выборки.
Как это делают?
Вторым запросом?
Или уже в приложении считают?
В КХ можно в json вывести min/max по колонке, но хочется каких-то сложных агрегаций. Есть еще group by with.
Плюс, нативный клиент умеет делать multiquery, a http - нет.
Может быть я что-то упускаю? -
В самом S3 ничего по под-папкам не раскладывается. Там просто лежат обезличенные блобы, на которые ссылаются метафайлы с локальной FS.
-
Подскажите, есть какая-то настройка, чтобы из КХ в CSV выгружать нулы как пустую строку вместо \N?
-
Привет. У меня есть вот такой запрос. По задумке все элементы кумулятивно складывается, и на каждой итерации вычитаем один элемент. При этом мы не должны допустить, чтобы в результирующем массиве были числа ниже 0
-
Вот тут работает, как нужно, но опускается ниже 0.
Что я упускаю? Как доработать второй запрос, чтобы числа не становились ниже 0? -
SELECT * FROM system.settings WHERE name LIKE 'output_format%'
-
нашел вот это output_format_tsv_null_representation - оно и для CSV работает?
-
Кажется, первый пример работает так, как написан. cumSum - это частичные суммы преобразованных x на префиксе от начала до x в данном случае. Первым получаем 4 - 1, а затем нигде не выполняется условие из if вплоть до 10.
-
Подскажите, что означает ошибка Error running query: Expecting ',' delimiter or ']', и в каких случаях она может быть. Запрос у меня такой SELECT streaming_session_id,
sequenceCount('(?1).*(?2)')(device_timestamp, event_name in ('rebuffer', 'auto_pause'), event_name = 'auto_play') as cnt_valid_sequences
FROM default.horus_logs
WHERE datetime BETWEEN toDateTime('{{ds}}') AND toDateTime('{{ds}}') + toIntervalDay('1')
AND streaming_session_id IN
(SELECT DISTINCT streaming_session_id
FROM default.horus_logs
WHERE datetime BETWEEN toDateTime('{{ds}}') AND toDateTime('{{ds}}') + toIntervalDay('1')
AND streaming_session_id <> ''
AND event_name = 'auto_play')
GROUP BY streaming_session_id -
не должно
но проверить можно -
не работает
-
Подскажите, в ClickHouse "\a" и "\b" являются какими-то спец.символами? Например при попытке вставить в таблицу последовательность символов, содержащую значение "\a" получается символ с кодом "07". А если сделать тоже самое с последовательностью "\c" - всё в порядке.
-
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
-
https://clickhouse.tech/docs/en/interfaces/formats/#data-formatting
Strings are output with backslash-escaped special characters. The following escape sequences are used for output: \b, \f, \r, \n, \t, \0, \', \\. Parsing also supports the sequences \a, \v, and \xHH (hex escape sequences)Input and Output Formats | ClickHouse DocumentationFormats for Input and Output Data ClickHouse can accept and return data in various formats. A format supported for input
-
Понял, спасибо 👌
-
да, я понял, спасибо)
-
Если хочется добавить штраф за позицию, то можно мб сделать обычный cumSum, а потом поверх сделать enumerate и map на две последовательности (значение и позиция), чтобы вычислить штраф без ухода в 0.
-
это сработало, спасибо за идею
-
:)
-
Всем привет!
Примерно такая ситуация (описываю напримере потому что код показать нельзя)
есть две таблицы:
А: id, name, date
B: aid, name, amount, date
для одного A.id может быть несколько записей в B, где A.id == B.aid, тоже самое насчет name, но с ним может быть несколько записей в каждой. делаем два запроса:
select sum(amount) as amount from ( select count() as count, name from A where date > (дата) group by name) tableA
any left join (select name, sum(amount) from B where date > (дата) group by name) tableB
using name
и второй:
select sum(amount) as amount from ( select count() as count, id from A where date > (дата) group by id) tableA
any left join (select aid, sum(amount) from B where date > (дата) group by aid) tableB
on tableA.id = tableB.aid
при этом значение суммы в amount получается разным, как такое может быть? -
разница по сути только в том, что в одном случае группируем по name, а в другом по id
-
слово any в any left join
говорит о том что у вас разные записи из из A и B могут в join попадать
и условия JOIN тоже разные
в одном случае по name во втором случае по aid -
ALL LEFT JOIN
попробуйте сравнить -
ALL LEFT JOIN выдал такой же результат
-
а вот если в запросе с aid сделать full outer join или right outer join, чинится
-
при этом в B нету таких строк для которых нету строки в A, по id
-
это говорит о том что в B есть строки которых нет в А
-
Да вот не могу найти, может не правильно смотрю, делаю запрос:
select count() from A tableA
full outer join B tableB on tableA.id = tableB.aid
where (tableA.id is null or tableB.id is null) and
tableA.date < (дата) and tableB.date < (дата) -
возвращает 0
-
У меня есть такая задача "Найти сессии, в которых между каждыми соседними событиями auto_play должно быть одно из событий [auto_pause, rebuffer]."
Я пыталась решать её через массивы
groupArray(event_name) AS event_names,
arrayReverseSplit(name, splitter -> splitter, event_names, arrayMap(x -> x = 'auto_play', event_names)) AS name_intervals,
arrayFilter(name -> name[-1] = 'auto_play', name_intervals) AS auto_play_intervals,
arrayFilter(name -> hasAny(name, ['rebuffer', 'auto_pause']), auto_play_intervals) AS valid_name_intervals,
length(auto_play_intervals) AS cnt_intervals,
length(valid_name_intervals) AS cnt_valid_intervals
сравнивая потом, что cnt_intervals = cnt_valid_intervals. Этот метод не проходил в ограничение памяти (20 GiB).
Пыталась использовать sequenceCount
sequenceCount('(?1).*(?2).*(?3)')(device_timestamp,
event_name = 'auto_play',
event_name IN ('rebuffer',
'auto_pause'), event_name = 'auto_play')
Это выдавало ошибку Pattern application proves too difficult, exceeding max iterations (1000000).
Через windowFunnel ничего внятного не получилось.
Помогите пожалуйста) -
Привет, версия CH 20.1.4, в логах такая ошибка Found parts with the same min block and with the same max block as the missing part 20201217_37149_38422_750. Hoping that it will eventually appear as a result of a merge растет delay по таблице, почитал читик нашел несколько вариантов решения, https://github.com/ClickHouse/ClickHouse/issues/10368#issuecomment-616310015 и и если установить новую версию типа такой 21.3.12, то можно выполнить alter table drop part ***
-
-
Привет! Если ли какие то варианты из двух разных таблиц схлопывать данные в одну таблицу? Например в 1'ой таблице айдишник и время установки, во 2'ой айдишник и время удаления.Можно в третью таблицу как то сложить одно и другое в две разные колонки?
-
оконные функции в кликхаусе??? Чет в поиске в офф доке over ничего не выдает. Где почитать можно про них?
-
первые 2 ссылки в гугле
https://clickhouse.tech/docs/en/sql-reference/window-functions/
https://blog.tinybird.co/2021/03/16/coming-soon-on-clickhouse-window-functions/Window Functions | ClickHouse Documentation[experimental] Window Functions ClickHouse supports the standard grammar for defining windows and window functions. The
-
класс. Буду пробовать. Спасибо
-
не понял... Вы же скинули решение, где чистится ЗК и рестартуются реплики, причем тут обноавление?
-
Пример:
Таблица содержит поле DateTime + реквизиты
Нужно получить последние значения реквизитов на каждую дату
В этом случае можно перезалить в таблицу EmbeddedRocksDB
упорядоченную по DateTime исходную таблицу с ключом toDate()
И не нужно соединения таблиц использовать. -
делался для кастомного движка MergeTree который позволяет хранить системный каталог (список партов) в rocksdb
-
там все равно после обновления надо будет парты чинить через detach part / attach part
-
select group by
или AggregatingMergeTree + argMax https://gist.github.com/den-crane/d03524eadbbce0bafa528101afa8f794 -
а если set max_threads=1
-
Спасибо. Интересно. Смущало, что не увидел сходу удаления записей, решил, что не доделано
-
Угу, похоже на то что мне нужно, спасибо
-
А если без .* в sequenceCount?
-
Всем доброе время суток, возможно как-то развернуть оба массива по позициям в массиве? Например
select
[2,3,4,5,6] as id
, ['2021-04-01 23:05:06','2021-04-01 23:10:22','2021-04-01 23:17:22','2021-04-01 23:19:25','2021-04-01 23:22:09'] as datetime_array
Должно стать
2 - '2021-04-01 23:05:06'
3 - '2021-04-01 23:10:22' и т.д. -
tableA.id is null or tableB.id is null
Join в КХ не продьюсит null, надо включать join_use_nulls=1 -
отсортировать один массив по значениям другого?
-
select
arrayJoin( arrayZip([2,3,4,5,6], ['2021-04-01 23:05:06','2021-04-01 23:10:22','2021-04-01 23:17:22','2021-04-01 23:19:25','2021-04-01 23:22:09'])) -
Спасибо! А отдельными стобцами возможно чтобы было id и datetime?
-
Норма ли то, что при ручном insert select мне кх даёт отлуп с Number of columns doesn't match? Насколько я понимаю если просто создать триггер, то всё сработает как надо?
-
вообще есть еще Array Join
select
(arrayJoin( arrayZip([2,3,4,5,6], ['2021-04-01 23:05:06','2021-04-01 23:10:22','2021-04-01 23:17:22','2021-04-01 23:19:25','2021-04-01 23:22:09'])) as x).1,
x.2 -
т.е. нужно узнать, есть ли хотя бы одна цепочка (без других событий) auto_play, auto_pause|rebuffer, auto_play в пределах сессии?
-
ну ошибка у вас в ручном инсерт
-
То что нужно, спасибо большое)
-
Нет, между каждыми двумя событиями auto_play должно быть auto_pause|rebuffer, и при этом могут быть и другие события
-
ну их можно предварительно отфильтровать я думаю
-
ну да, тогда нужно, чтобы все цепочки были вида auto_play, auto_pause|rebuffer, auto_play
-
sequenceCount игнорит те, что не в кондишнах
-
родил что-то такое (на своей схеме), но я заюзал sequenceMatch впервые и нужно думоц, корректно ли это
SELECT
csid,
sequenceMatch('(?1)(?2)(?1)')(toDateTime(ts), event_type = 'PLAY', event_type = 'BUFFERING') AS has_seq
FROM
(
SELECT
ts,
seq,
csid,
event_type
FROM events
WHERE event_type IN ('PLAY', 'BUFFERING', 'READY')
ORDER BY
ts ASC,
seq ASC
)
GROUP BY csid
HAVING has_seq > 0
если я правильно понял, должно матчить PLAY-BUFFERING-PLAY -
Чуть дополню, что можно это дело обойти
https://kb.altinity.com/altinity-kb-functions/altinity-kb-sequencematch -
всем привет)
подскажите, пожалуйста, если для внешнего справочника указать invalidate_query, то как часто выполняется этот запрос для проверки наличия изменений? -
всем спасибо за идеи, в итоге я оставила решение с массивами, предварительно выбрав сессии только с этими событиями :D
-
с тем самым периодом который указан в словаре.
кстати есть еще одна фича https://kb.altinity.com/altinity-kb-dictionaries/partial-updates -
в соответсвии с тем как задано LIFETIME
то есть при наступлении условий LIFETIME срабатывает invalidate_query и проверяется, нужно ли загружать данные -
https://clickhouse.tech/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-lifetime/
вот тут подробнее написаноDictionary Updates | ClickHouse DocumentationDictionary Updates ClickHouse periodically updates the dictionaries. The update interval for fully downloaded dictionari
-
а если задать очень маленький lifetime (размер справочника небольшой, быстро обновится), это на что повлияет, кроме потребления ресурсов клика?
-
ни на что не повлияет
-
спасибо большое!)
-
-
Это что за драйвер?
-
-
Хм. value же является типом BigDecimal и положительные значения корректно преобразуются?
-
Да
-
-
Хм, кажется там используется BigInteger как тип данных
-
-
Так и есть, только вот где минус потерялся, неясно и почему так странно преобразует число
-
https://github.com/ClickHouse/clickhouse-jdbc/blob/094ed0b9d2dd8a18ae0c7b3f8f22c35e595822a6/clickhouse-jdbc/src/main/java/ru/yandex/clickhouse/util/ClickHouseRowBinaryStream.java#L194
интересное преобразованиеclickhouse-jdbc/ClickHouseRowBinaryStream.java at 094ed0b9d2dd8a18ae0c7b3f8f22c35e595822a6 · ClickHouse/clickhouse-jdbcJDBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-jdbc development by creating an account on GitHub.
-
SELECT
hex(reinterpretAsString(-860 * 10000000)) AS init,
hex(reinterpretAsString(CAST('109091.1627776', 'Decimal128(7)'))) AS dec1,
hex(reinterpretAsString(CAST('-860', 'Decimal128(7)'))) AS dec
Query id: 2e2fdb71-34c1-47ff-8cd3-6b745247c97c
┌─init─────────────┬─dec1───────┬─dec──────────────────────────────┐
│ 006A66FFFDFFFFFF │ 006A66FFFD │ 006A66FFFDFFFFFFFFFFFFFFFFFFFFFF │
└──────────────────┴────────────┴──────────────────────────────────┘
SELECT
hex(reinterpretAsString(860 * 10000000)) AS init,
hex(reinterpretAsString(CAST('109091.1627776', 'Decimal128(7)'))) AS dec1,
hex(reinterpretAsString(CAST('860', 'Decimal128(7)'))) AS dec
Query id: 6f48970c-20a2-4e17-a70f-7d15c85c728e
┌─init───────┬─dec1───────┬─dec────────┐
│ 0096990002 │ 006A66FFFD │ 0096990002 │
└────────────┴────────────┴────────────┘ -
Наверное в случае отрицательных значений
new byte[16 - r.length] должно состоять из FF а не нулевых байтов -
Выглядит как-то странно :)
-
и что 2.4.3 умел writeDecimal128 ?
-
-
-
clickhouse-jdbc-bridge/ByteBuffer.java at a462e07f22101fac3c1de388d3e80dc59e6e9d85 · ClickHouse/clickhouse-jdbc-bridge
A JDBC proxy from ClickHouse to external databases - clickhouse-jdbc-bridge/ByteBuffer.java at a462e07f22101fac3c1de388d3e80dc59e6e9d85 · ClickHouse/clickhouse-jdbc-bridge
-
Кажется тут иначе сделано и видно обработку минуса
-
Можно попробовать украсть в clickhouse-jdbc и испытать
-
-
-
на клиенте какой timeout выставлен?
через tcpdump снимали трафик? точно ответ пустой? -
timeout HTTP запроса?
-
таймаут час стоит, а отваливается сразу
ну т.е. как только пройдет timeout_before_checking_execution_speed секунд
к сожалению на tcpdump нет прав
но запрос выглядит как обычно
< HTTP/1.0 200 OK
...
< X-ClickHouse-Progress: {"read_rows":"1686521344","read_bytes":"3373042688","written_rows":"0","written_bytes":"0","total_rows_to_read":"26199462570"}
< X-ClickHouse-Summary: {"read_rows":"1698383174","read_bytes":"3396766348","written_rows":"0","written_bytes":"0","total_rows_to_read":"26199462570"}
<
* Closing connection 0 -
-
-
в 19.4 также было, как вообще вы себе это представляете http code уехал 10 минут назад клиенту.
параметр есть чтобы клиенту не отдавать пока запрос не выполнился -
нет, я не ожидаю HTTP 500
я ожидаю что будет заголовок X-ClickHouse-Exception-Code и ошибка в теле -
я не знал про X-ClickHouse-Exception-Code, но вроде это довольно новая фича, ее не было в 19.4
-
Но ошибка ведь пишется прямо в данные?
-
вот почему-то если опечататьСЯ в запросе он приходит, если уперлись в лимит, молча отдаем пустоту
нет, ошибка не пишется в данные
в том то и засада -
timeout_before_checking_execution_speed можно поставить 0, но это не относится к проблеме
-
echo 'SELECT sleep(1) from numbers(10) settings max_block_size=1' | curl -vvv 'http://localhost:8123/?max_execution_time=5&timeout_before_checking_execution_speed=1' --data-binary @-
...
< X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
<
0
0
Code: 160, e.displayText() = DB::Exception: Estimated query execution time (6.666670000000001 seconds) is too long. Maximum: 5. Estimated rows to process: 10: While executing Numbers (version 21.7.1.6993 (official build)) -
виноват, наврал про body, спасибо
но X-ClickHouse-Exception-Code бы не помешал -
Use HTTP trailers. · Issue #21136 · ClickHouse/ClickHouse
If client supports HTTP 1.1, use trailers to provide progress, status and possibly error message. Use case This is the only way to return error in the middle of query processing if HTTP headers hav...
-
-
там все сложно с X-ClickHouse-Exception-Code, он неправильно сделан, иногда работает, иногда нет
-
Sampling Example
Clickhouse table sampling example
-
-
благодарю) а то в оф. документации как-то непонятно
-
монотонность не может быть низкой, она либо есть, либо ее нет, true/false
-
low cardinality -- это малое кол-во уникальных значений.
24 - часа в сутках это low cardinality
86400 - секунд в сутках это НЕ low cardinality -
а какой тут временной период? если сделать мин и макс по дате?
-
https://play.clickhouse.tech/?file=sample
SELECT
min(StartTime), max(StartTime)
FROM datasets.visits_v1
2014-03-17 00:00:00 2014-03-23 23:59:59 -
а вот оно что, HTTP headers cannot be sent after data.
-
будем парсить body значит и не обращать внимания на 200 ОК
спасибо большое за помощь -
Это низкая частота чего-либо
-
-
-
Да
-
-
-
-
external dictionary
add column user_birthday Date default dictGetDate('pg_dict', 'user_birthday', toUInt64(user_id)) -
alter table ... update user_birthday = user_birthday where 1
-
Если у меня в таблице в CH лежит миллиард записей оно сделает миллиард запросов в постгрес?
-
в общем-то можно и не добавлять а прямо в select делать dictGetDate('pg_dict',...
-
нет, словари обычно живут в хеш-таблице в памяти КХ , как настроите
-
-
Можно ли countState / countMerge использовать в каскаде материализованых вьюх?
CREATE MATERIALIZED VIEW 'View1' TO 'table1'
AS
SELECt countState(fi) FROM table
CREATE MATERIALIZED VIEW 'view2' TO 'table2'
AS
SELECT countMerge(f1) FROM table1 -
-
-
можно, countState -> countMergeState,
!!!! но не нужно , храните simpleAggregateFunction(sum) -
для семплинга ? можно и нужно
в смысле нужно ORDER BY (user_id, toYYYYMMDD(date)) -
для семплинга использую другое поле, которое идёт после user_id и date
-
-
отдельное поле для date не нужно
-
кстати toYYYYMMDD -- это число
-
-
вам лучше ORDER BY (user_id, toDate(datetimecol64))
-
- 02 June 2021 (175 messages)
-
-
нет, это низкое "разнообразие" значений
монотонность это "постоянное увеличение \ уменьшение" значения с точки зрения сортировки -
Подскажите пожалуйста. Бьюсь над задачей уже продолжительное время.
Вот к примеру таблица:
Нужно просуммировать price у тех событий, в которых есть click=1 для каждой cat.
Пробовал двойной группировкой, сначала по id, потом по cat. Результат долго и падает по памяти
Пробовал join. Потом Where in. Все падает по памяти. Какие есть подходы еще, подскажите. -
-
Application: DB::Exception: Suspiciously many (23) broken parts to remove.: Cannot attach table db.impressions from metadata file /var/lib/clickhouse-hdd/de
-
Помогите плиз, как починить?
-
Второе решение
SELECT sumIf(price, click=1) FROM (SELECT any(price), any(click) FROM table GROUP BY id) GROUP BY cat -
-
Смотрите в сторону какого нибудь etl продукта
-
Например ?
-
ну самый простой путь без сторонних тулов
INSERT INTO ... SELECT .. FROM odbc(...);
https://clickhouse.tech/docs/en/sql-reference/table-functions/odbc/
Но надо на сервер clickhouse поставить unixodbc + oracle odbc driver и правильно его настроить и проверять насколько это будет быстро по производительности (можете упереться в скорость odbc)
если не пойдет с odbc можно jdbc попробовать
еще вариант, выгружать из oracle в CSV и грузить в clickhouse
наверняка можно сделать что нибудь типа такого pipe сгородить
echo "set colsep ,; set headsep off; set pagesize 0; set trimspool on; spool off; SELECT * FROM db.table;" | sqlplus user/password@host -s /nolog | clickhouse-client -q "INSERT INTO db.table FORMAT CSV"odbc | ClickHouse Documentationodbc Returns table that is connected via ODBC. odbc(connection_settings, external_database, external_table) Parameters:
-
Pentaho, ssis, airflow, luigi, а так, гугл в помощь, их миллион
-
CSV пробовал - 10% процентов данных отбрасываются по разным причинам - то спецсимволы в данных то скобки.
тяжело найти хороший разделитель - и если экранировать кавычки во всех полях (таблица 130 колонок), то это замедляет. -
Group by id having uniqExactIf(Cat, click=1) = 3
-
ну можно попробовать
https://github.com/xo/usql
для коннекта к oracle
и делать
usql "oci8:user:password/host:port/database" -c "SELECT ..." --csv
но тоже не знаю насколько это будет быстроGitHub - xo/usql: Universal command-line interface for SQL databasesUniversal command-line interface for SQL databases - GitHub - xo/usql: Universal command-line interface for SQL databases
-
-
менять через https://github.com/chmln/sd на \x0GitHub - chmln/sd: Intuitive find & replace CLI (sed alternative)
Intuitive find & replace CLI (sed alternative). Contribute to chmln/sd development by creating an account on GitHub.
-
Спасибо
-
Пытаюсь понять и не получается. Видимо у меня чего то не хватает)
Как можно с помощью uniqExactIf можно подсчитать? -
Вы знаете как работает Having?
-
да, фильтрует после группировки
-
выбрать такие группы для которых количество уникальных категорий в группе равно нужному значению
-
Все равно не понимаю, как это решит задачу. Как просуммирует для каждой категории у которой есть клики?
-
Немного утомительно вникать, может быть я неправильно понял задачу и вы на самом деле ищете оконные функции.
-
пытался наложить оконные функции на эту задачу, тоже не получилось. Возможно я плохо знаю оконные функции
-
Попытался ещё раз прочитать формулировку задачи и ваши запросы - мне по прежнему кажется что вам достаточно having.
Что-то типа
select sum(p) from ( select sum(price) as p from table group by id having uniqExactIf(cat, click=1) = uniqExact(cat) ) -
-
Привет, ранее в топик кафки ключ не паблишился, но теперь - требуется. И в контракте мы никак не указывали обработку ключа. Сломается ли парсинг сообщений, нужно ли добавлять ключ в контракт?
-
а в чем здесь выигрыш? Видимо я туп, что не понимаю
-
Добрый день
Версия 21.3.12.2, через какое-то время clickhouse перестает работать, clickhose-client тоже не подключается.
перезапуск временно решает проблему.
Куда смотреть дальше ?
В логах такие ошибки:
<Error> DB::IBackgroundJobExecutor::jobExecutingTask()::<lambda()>: Code: 241, e.displayText() = DB::Exception: Memory limit (total
) exceeded: would use 56.53 GiB (attempt to allocate chunk of 4219310 bytes), maximum: 56.53 GiB, Stack trace (when copying this message, always include the lines below):
0. StackTrace::StackTrace() @ 0x3a8187f in /usr/bin/clickhouse
1. DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, bool) @ 0x3a79ed8 in /usr/bin/clickhouse
2. DB::Exception::Exception<char const*, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, long&, std::__cxx11::basic_string<ch
ar, std::char_traits<char>, std::allocator<char> > >(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*&&, char const
*&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char
> >&&) @ 0x3a80c28 in /usr/bin/clickhouse
..... -
Да никакого выигрыша. Если нужно группировать по очень кардинальному полю (как id) - конечно нужна куча памяти. Можно на диске погруппировать - см. max_bytes_before _external_group_by
-
Добрый день, всплыла проблема с лимитом памяти запроса:
Received exception from server (version 21.5.6):
Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (for query) exceeded: would use 9.42 GiB (attempt to allocate chunk of 536870912 bytes), maximum: 9.31 GiB.
Сам запрос это:
OPTIMIZE TABLE grid.demo_rows FINAL
Причем только на этой табличке, остальные нормально отрабатывает.
Была версия 21.2.5, сейчас обновились до version 21.5.6
И в старой версии запрос не проходил и в нынешней. Как побороть?(SET min_bytes_to_use_mmap_io = 0 - делал - не помогло) -
-
ЕМНИП при попытке записи туда (т.е. при запуске запроса)
-
ее может не быть если она отключена, принудительно
-
А в конфиге он включен?
-
смотрите /var/lib/clickhouse/preprocessed_configs/config.xml что там насчет query_log сказано
-
-
-
-
-
-
service clickhouse-server start && echo "select 1 + 1; select * from system.query_log;" | clickhouse-client -n
Start clickhouse-server service: Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
DONE
2
Received exception from server (version 20.8.4):
Code: 60. DB::Exception: Received from localhost:9000. DB::Exception: Table system.query_log doesn't exist.. -
-
systemctl start clickhouse-server && echo "SELECT 1 SETTINGS log_queries=1; SYSTEM FLUSH LOGS; SELECT count() FROM system.query_log" | clickhouse-client -mn
-
Да, так проходит)
root@75061c8085dd:/tmp# service clickhouse-server start && echo "SELECT 1 SETTINGS log_queries=1; SYSTEM FLUSH LOGS; SELECT count() FROM system.query_log" | clickhouse-client -mn
Start clickhouse-server service: Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
DONE
1
2 -
-
оно флашится каждый 7.5 секунд (настраиваемая велицина). ну и log_queries нужно было для того чтобы было что флашить, а system flush logs сам процесс flush триггерит...
-
-
хватит спамить. тем более здесь
-
лучше репорт отправляйте, призывать спамеров не спамить, дело не благодарное
-
Добрый день! Удалось побороть?
-
Пока что не удалось. Смотрел конфиги kafka в clickhouse, там не нашел ничего, что могло бы решить проблему.
-
Понял. Жаль.
Мы завели кафка-табличку чтобы писать в нее через матвью. И начали сыпать такие ворнинги -
да, я тоже пишу через матвью в таблицу кафка. Возможно она не предназначена для этого, но это работает)
-
Никак, надо чинить сам КХ. Но это ни на что не влияет
-
Если большинство событий с click = 1, то можно посчитать наоборот: сначала всё, а потом вычесть, где click != 1.
Если по памяти не влезает немного, то можно разбить на несколько запросов по id % N = i и потом объединить.
Еще все типы данных привести к минимально возможным. -
Объединять через union или как?
-
-
ага, просто в одном везде where id % 2 = 0 , в другом where id % 2 = 1, а потом юнионом объединить. Или больше групп сделать. Топорно, но работает, если события по id не пересекаются.
-
Можно по крону запускать какой-то запрос, который данные за вчера будет схлопывать и в отдельную таблицу писать. В запросе потом использовать схлопнутую таблицу плюс отдельно только данные за сегодня схлопнуть запросом. Ну это если их можно упорядочить по времени или еще как-то.
-
Да, как раз такой вариант все время продумываю, но останавливает что событие может прийти через несколько дней только. Что усложняет схлопывание.
-
>>Пробовал двойной группировкой - падает по памяти
попробуйте
set max_bytes_before_external_group_by = <половина вашей памяти> -
Пробовал. Работает. Только скорость уже так себе.
-
а какой запрос?
-
cannot read all data in NativeBlockInputStream из-за чего может быть данная ошибка? Делаю insert чанками по 10 к строк
-
Всем привет
Подскажите пож по шардироварию таблиц.
Создал таблицу on clister <cluster> и к ней прицепил таблицу на distributed
Так в момент проливки данных в таблицу distributed, забивается вся оперативка и чтение из этой таблицы становится невозможным.
Что я делаю не так, может кто то подробно рассказать в ЛС? -
Добрый день, делаю по вот этой https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/replication/#preobrazovanie-iz-mergetree-v-replicatedmergetree инструкции перенос MergeTree в ReplicatedMergeTree, но при выполнении ALTER TABLE table_name ATTACH PARTITION 19700101, пишет: Ok. 0 rows in set. и данные не появляются в этой таблицеРепликация данных | Документация ClickHouse
Репликация данных Репликация поддерживается только для таблиц семейства MergeTree: ReplicatedMergeTree ReplicatedSumming
-
Подскажите пожалуйста в чем может быть проблема
-
MemSQL поддерживает sample_ratio, т.е. сэмплирование результата (грубо говоря исполнение над частичной выборкой). Насколько я понимаю, ничего такого в КХ нету, тогда вопрос, можно ли сэмулировать частичное выполнение запроса (т.е. ограничение по времени с возвращением частичного результата). Это не совсем то, конечно, но близко.
-
вообще есть сэмплирование то https://clickhouse.tech/docs/ru/sql-reference/statements/select/sample/SAMPLE | Документация ClickHouse
Секция SAMPLE Секция SAMPLE позволяет выполнять запросы приближённо. Например, чтобы посчитать статистику по всем визита
-
оффтоп, если не затруднит, можешь в паре предложений вообще описать use case для MemSQL? не знаком с ним близко, но очень интересно)
-
Спасибо! Пропустил
-
SELECT sumIf(price, click=1), cat
FROM (
SELECT any(price), any(cat), any(click) FROM table GROUP BY id
) GROUP BY cat -
У нас внутри есть проект, который использует MemSQL с двумя движками (row, columnar), делается это для point-lookup и для аналитики.
-
а для классических целей СУБД он подходит как замена MySQL/Postgres?
-
Но это дорого, поэтому пытаемся им предложить КХ. Сэмплирование скорее всего было сделано для быстрого ответа.
-
С row движком это фактически MySQL, только распределенный.
-
добрый день, подскажите пожалуйста, почему запрос следующего вида может выполняться 4.2sec и как стоит оптимизировать? Таблица - ReplacingMergeTree, 1’671’699 записей, 75 колонок
SELECT * FROM tablename FINAL WHERE datefield <= '2021-06-02 10:39:34' AND `status`=‘statusname’ LIMIT 0, 20 -
SHOW CREATE TABLE tablename покажите?
-
Еще вопрос, на каком уровне компиляция запросов через LLVM в КХ? В MemSQL - это вполне фича, которой пользуются.
-
Вероятнее всего из-за FINAL. И ещё, Вам точно все 75 колонок в выборке нужны?
-
create table tablename
(
timestamp DateTime,
approve_at Nullable(DateTime),
id UUID,
status Enum8('hold' = 1, 'approved' = 2, 'rejected' = 3),
network_id UInt32,
offer_id UInt32,
merchant UInt32,
…
)
engine = ReplacingMergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (timestamp, network_id, offer_id, merchant, id)
SETTINGS index_granularity = 8192; -
спасибо, навели меня на мысль, мне действительно не нужны все разом, в первом запросе достаточно запросить идентификаторы, а уже потом запрашивать все поля для конкретных
-
и не подскажите, еще не появилась фича, позволяющая в ReplacingMergeTree заливать обновленные записи только с измененными полями, а не со всеми?
например, у меня изменился статус и я хочу только его заменить у записи, а не делать полный select+insert всех полей повторно -
дедупликация происходит по ключу сортировки
-
-
не-а
-
Всем привет! Есть кластер из 3 нод, на каждой ноде шард КЛИКА, обращаюсь через главную таблицу Distributed и делаю агрегацию через неё, но главный сервер падает. ВОПРОС, агрегация проходит на главном сервере, а не на каждой ноде?
-
промежуточная агрегация на каждой ноде
после этого результаты финализируются на ноде "инициаторе запроса" -
как именно выглядит запрос? у вас там нет случайно GROUP BY по полу в котором миллионы уникальных значений типа user_id ?
-
Вообще будет ощутим результат шардирования, если в кластере 3 сервера
По 2 гига 2 ядра?) -
Есть ли какие-нибудь минимальные требования по характеристикам?
-
Всё зависит от объёма хранимых данных. Но, вообще, это скромно...
-
1 гигабайт данных, на запросе вылет по памяти)
-
26 миллионов строк
-
Click на главном сервере ест больше ресурсов?
-
1 гигабайт не-сжатых данных? ;)
-
нет понятия "главный сервер"
есть понятие "нода инициатор запросов" -
ну ему надо свою часть данных прочитать и потом еще с других серверов результаты обработать
у вас 3 сервера. с разным shard_id в system.macros ? -
Просто есть настройка, при которой есть группа нод, куда данные идут, а на инициаторе может не быть этой таблицы
-
на этой группе нод, там таблицы поверх которых distributed какой движок? ReplicatedMergeTree ? shard_id при этом разные?
-
MergeTree
-
Вы про это?
-
ок. если просто MergeTree ... и запрос приходит на ноду инициатор, а которой remote_servers для выбранного кластера, не содержат ноду инициатор?
-
да, но это играет роль только если таблица ReplicatedMergeTree
-
В моем случае содержит)
-
Какой ключ группировки, сколько колонок в выборке?
-
-
Да, этот запрос будет агрегироваться на инициаторе.
-
Средствами Клика я не добьюсь, распределенной агрегации для нужного мне результата?
-
Думаю, что нет.
-
Почему он начал ругаться при чтении из CSV?
Column 11, name: userId, type: String, parsed text: "2f610664e960be67"
Column 12, name: sessionProperties, type: String, parsed text: <EMPTY>
Column 13, name: latitude, type: Float32, ERROR: text ",{},159369" is not like Float32
: data for INSERT was parsed from stdin: (at row 1) -
Потому что ",{},159369" не float. Смотрите, что в файле у Вас.
-
Похоже на то, что поля "съехали" в строке
-
Другие строки нормально, с таким же заполнением нормально
-
Первая ок, вторая не прошла
-
Может, там что-то левее в строке съехало?
-
Неа, решил записывать 0 место пустоты и это помогло
-
создать временную табличку с движком SummingMergeTree по ключу cat и в неё залить с условием click = 1. И из временной выбирать. Тогда в память не упрётся
-
... только не забудьте сгруппировать при выборке из временной таблицы или выполнить для неё OPTIMIZE TABLE
-
Интересно, можно эту таблицу держать как постоянную и заполнять её по крону
-
Тут уж как вам нужно. Но таким способом подобные задачи на тестовой машинке с 8 Гб ОЗУ удавалось решать на размерах таблиц в несколько миллиардов строк. И, в общем, достаточно быстро работает. В Клике вставка оптимизирована очень хорошо.
-
Спасибо
-
вряд ли да и зачем если для этого уже давно можно AggregatingMergeTree + SimpleAggregateFunction(anyLast, Nullable())
-
О! А можно про это подробнее? Или где почитать?
-
в документации?
-
Где-нибудь. Может с примером?
-
в документации и пример есть...
создаёте таблицу с типом AggregatingMergeTree, необязательные колонки SimpleAggregateFunction(anyLast, Nullable())
читайте подробнее доку по AggregatingMergeTree и по SimpleAggregateFunction -
Спасибо, почитаю.
-
2021.06.02 20:08:03.958947 [ 110870 ] {} <Warning> default.table (ReplicatedMergeTreePartCheckThread): Checking part 20201217_37149_38422_750
2021.06.02 20:08:03.958952 [ 111225 ] {} <Information> default.table: DB::Exception: No active replica has part 20201217_37149_38422_750 or covering part
2021.06.02 20:08:03.962397 [ 110870 ] {} <Warning> default.table (ReplicatedMergeTreePartCheckThread): Checking if anyone has a part 20201217_37149_38422_750 or covering part.
2021.06.02 20:08:03.974112 [ 110870 ] {} <Warning> default.table (ReplicatedMergeTreePartCheckThread): Found parts with the same min block and with the same max block as the missing part 20201217_37149_38422_750. Hoping that it will eventually appear as a result of a merge.
2021.06.02 20:08:04.833348 [ 111130 ] {} <Information> default.table: DB::Exception: No active replica has part 20201217_37149_38422_750 or covering part -
Some merges may stuck · Issue #10368 · ClickHouse/ClickHouse
This bug is discovered on Yandex.Metrica servers. If there is assigned merge but some parts in between of the range of parts to merge get lost on all replicas, the merge cannot proceed and the foll...
-
-
-
-
-
-
Так это вообще не ошибки и не проблемы, это нормальное состояние.
-
Реплика не успела скачать исходный парт,
парт 20201217_37149_38422_750 уже удален на всех репликах, но есть парт смерженный из 20201217_37149_38422_750 с with the same max block -
что в system.replication_queue ?
-
-
-
Подскажите пожалуйста как можно перевести таблицу MergeTree из устаревшего способа создания в новый без потери данных?
-
а что за устаревший способ создания?
-
MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192)
-
-
объем данных очень большой, хотелось бы более изящное решение
-
если insert select без группировки, Clickhouse сделает всё красиво, в OOM уйти не должен
-
чего ? какой делай? в чем проблема у вас?
-
никак, re-insert
-
А оценочно можно просчитать время перевода 900Тб данных, в строках к сожалению сказать сейчас не смогу
-
формат партов разный, в старом не хватает файликов, называются парты по другому, есть утилита конвертации партов в исходниках, но она именно про парты.
-
10 мил/ строк переливаете, insert select limit 10000000 интерполируете
-
оптимально разделить на блоки по 10мил строк и залить многопоточно, это ускорит время?
-
кусками придется в любом случае заливать, по месяцу или по дню. Современные КХ умеют параллелить insert select если задать параметр
-
--max_insert_threads arg The maximum number of threads to execute the INSERT SELECT query. Values 0 or 1 means that INSERT SELECT is not run in parallel. Higher values will lead to higher memory usage.
-
Господа,
Концептуальный вопрос
Есть легаси таблицы вида
ENGINE = MergeTree(__date,_date,8192)
и построенная на них логика. Поле _date статичное для всех записей.
Попытался перевести на более современный синтаксис и так как _date по сути заглушка, попробовал следующее
ENGINE = MergeTree
ORDER BY tuple()
SETTINGS index_granularity = 8192
В итоге получил OOM на той же логике.
Как статичный PK оказывается по итогу лучше варианта с его отсутствием? -
а разве LIMIT в данной ситуации не применится после вычитки всех данных? Как в реляционных это бывает
-
эм? нет,
и нет таких баз которые так делают, не придумывайте -
пример покажите, запрос хотя бы.
а так нет, нету никакой разницы
и версию КХ -
Запрос генерируетcя дэшбордом и он не человекочитаем из-за синтаксиса и колоссального размера к сожалению
-
Версия 21.4.5
-
cat /etc/clickhouse-server/users.d/min_bytes_to_use_mmap_io.xml
<?xml version="1.0"?>
<yandex>
<profiles>
<default>
<min_bytes_to_use_mmap_io>0</min_bytes_to_use_mmap_io>
</default>
</profiles>
</yandex>
а хотя оно может 0 и было в 21.4
надо трассу запроса смортеть -
В данной версии файла даже нет на текущий момент
-
боже, никаких файлов нет. Это я только что придумал такой файл. Почитайте https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-server-config-filesServer config files
How to manage server config files in Clickhouse
-
Я вчера задавал вопрос, про эту проблему
-
очень частый кейс, когда пагинацию на сайтах делают через запрос к бд с помощью LIMIT... OFFSET... и это приводит к многократной вычитке одних и тех же данных, поскольку LIMIT OFFSET применяются после остальной части запроса
-
ну естественно после. Просто результат скролируется, я не понял причем тут мой запрос который вычитает 10 мил. рандомных строк? Не важно сколько строк в таблице, прочитано будет около 10млн., вся таблица прочитана не будет.
-
Спасибо.Не совсем по документации понял на что эта настройка непосредственно влияет?
-
наверное не вся, но пока не наберет OFFSET + LIMIT, если ничего не путаю...
-
вы о чем вообще?
был вопрос: "А оценочно можно просчитать время перевода 900Тб данных, в строках к сожалению сказать сейчас не смогу"
я ответил: "10 мил/ строк переливаете, insert select limit 10000000, интерполируете"
какой offset? я один раз предложил сделать select * from t limit 1000000 чтобы узнать сколько времени 10млн. вставляются -
DB::Exception: Memory limit (for query) exceeded: would use N1 GiB (attempt to allocate chunk of N2 bytes), maximum: N3 GiB: While executing MergeTreeThread. · Issue #24505 · ClickHouse/ClickHouse
We have a large syslog database. At some point it starts failing as SELECT message FROM syslog WHERE timestamp > (NOW() - toIntervalHour(48)) LIMIT 1000 FORMAT Null Query id: 985cfa48-099b-4...
-
да, я влез не разобравшись, извиняюсь...
-
да, всё верно, при потоковом чтении рандомных строк базе нет смысла читать больше 10 млн. Сорри за оффтоп и смуту
-
Valeriy @den_crane
Спасибо за наводку!
Хотя бы count по запросу смог отработать что уж положительная динамика! - 03 June 2021 (192 messages)
-
Добрый день. Такой вопрос, собираем в CH логи, нужно организовать просмотр через веб, только для своих сотрудников. Хотелось обойтись без бекенда. Просто проксируем nginx запросы на HTTP интерфейс CH. Авторизация делается на nginx, а для CH пользователь задается установкой заголовков. Пользователь имеет права только на чтения, и нарезаны лимиты. Норм решение или с огнем играем?
-
а чем бэк будет принципиально лучше?
-
Дополнительный слой защиты. Вместо SQL - ограниченный язык для фильтров
-
Подскажите, что означают параметры?
-
Я как бы понимаю, но не уверен в полной мере)
-
ну. если будут отдельные аудит логи на тему того, кто какие запросы и когда делал
корорые в тот же clickhouse не будут складываться, то жить можно
и если nginx не тупо basic auth один на всех, а нормальная ntlm \ sso авторизация =)
а так, любой безопасник завернет =)
ну и смотря какие логи, насколько там sensitive инфа =)
но если вы не PCI-DSS то наверное не так страшно все -
Как можно ускорить insert запросы на шарды?
-
И вообще имеет смысл записывать через Distributed таблицу? Или лучше самому распределять и писать на нужные шарды?
-
если можете сами распределять, распределяйте вставляйте сразу в ReplicatedMergeTree
-
-
1) нет, clickhouse local это не embedded библиотека, это standalone executable file, в природе нет embedded решений для clickhouse,
если вы пытаетесь заменить sqlite, то конечно вам особо ничего не мешает сделать exec для clickhouse-local
но вам придется реалзовывать какой то глобальный лок, чтобы несколько clickhouse-local не потрошили одну базу одновременно, через exec flock ... clickhouse-local в принципе это возможно, но это путь в никуда
2) в clickhouse есть http интерфейс
https://clickhouse.tech/docs/en/interfaces/http/
в lua есть HTTP client модули https://luarocks.org/modules/daurnimator/http
можно спокойно запрашивать SELECT ... FORMAT JSON
и парсить через https://luarocks.org/modules/xpol/rapidjsonHTTP Interface | ClickHouse DocumentationHTTP Interface The HTTP interface lets you use ClickHouse on any platform from any programming language. We use it for w
-
В таких вопросах хотелось бы понять наверное какое именно решение на SQLite вы хотите заменить
-
-
Микро бд для обработки таблиц из условного табличного редактора
-
а как можно сделать прореживание старых данных, т.е, например, оставить каждую N-ю строку из набора с одинаковыми колонками? Как я понимаю это будет что-то типа TTL <expr> GROUP BY (a, b, c, ??) - что там вместо ?? может быть, чтобы каждая N-я строка из группы была?
-
что такое CHYT?
обычный ClickHouse настраивали. там нет каких то особенных проблем кроме багов DataGrip -
Это Clickhouse over YT) Внутренняя приблуда, думал вдруг кто из коллег подскажет))
-
-
а что такое YT?)
-
-
Youtrack, емнип
-
я, кстати, не знаю как она расшифровывается - ыть она и в африке ыть)
-
фу нет
-
А шо тода
-
YT: зачем Яндексу своя MapReduce-система и как она устроена
В течение последних шести лет в Яндексе идет работа над системой под кодовым называнием YT (по-русски мы называем её «Ыть»). Это основная платформа для хранения и обработки больших объемов данных — мы...
-
это некий аналог хадупа с кучей всего)
-
YT: зачем Яндексу своя MapReduce-система и как она устроена
В течение последних шести лет в Яндексе идет работа над системой под кодовым называнием YT (по-русски мы называем её «Ыть»). Это основная платформа для хранения и обработки больших объемов данных — мы...
-
если это "микро" то есть там нет "больших" данных - чем не устраивает sqlite?
-
ну и зачем вам тогда clickhouse ?
в нем UPDATE \ DELETE нет например -) -
Импортозамещение....
-
не российское... понимаю что идиотизм но хотят наше, самостийное....
-
Linter, Cache :)
-
прикалываетесь?
ну поздравляю, 60% коммитов вносится из-за рубежа... 20% от китайцев вообще
в реестре ПО никаком clickhouse вроде не замечен
хотя какой нибудь ArenaData может и сварганит какой нибудь форк для госух...
меняйте на Postgres Pro Standart
отечественнее не бывает
для госухи они лицензировались -
логика и здравый смысл не имеют значения
-
Увы, но вы правы.
-
Interbase/Yaffil :)
-
чотам ещо из "отечственного" есть, Postgres вроде был замечен в реестре отеч ПО
-
Компания Postgres Professional
Postgres Professional - российская компания, разработчик систем управления базами данных
-
-
Файловый кеш в линуксе всегда занимает всю доступную свободную память и вытесняется при необходимости, это нормально
-
Подробнее https://www.linuxatemyram.com/
-
Я потом сделал запрос к не распределенной таблице, и у меня он повис с жалобой на отсутствие памяти. Это смутило
А так спасибо, изучу) -
вообще-то как раз в реестре кликхаус есть
-
-
ох, ну ок
yandex.cloud тоже хочет продаваться нефтянке и госухам... -
спасибо за ссылку
-
Подскажите пожалуйста, запустили ALTER TABLE ATTACH PARTITION FROM SETTINGS replication_alter_partitions_sync=2, запрос подвис, т.к. не может временно зааттачить партицию на реплике. Если его убить(висит уже давно) то партиция будет зааттачена на вызывающей ноде или это атомарная операция?
Версия 21.3.12.2 -
-
батч больше миллиона строк?
если нет, то ничего не появится -
должен быть атомарным
-
Меньше. Спасибо
-
как выполнять запросы on cluster , когда одна реплика не работает? получается рассинхрон
-
Всем привет. Как лучше сделать структуру для кейса когда к 5% данных будет оставляться заметка? Думаю merge tree для основных данных, и collapsing merge tree для комментов. Потом данные тащить через union all. Рабочая схема, или уже получше можно сделать? Денормализованно хранить как понимаю будет хуже
-
починить репилку, ей из ZK прилетит запрос она его выполнит
-
ну union all запросы паралельно будет выполнять...
вполне может отработать
а для чего вам это все?
аналитика какая то?
или вы clickhouse прикручиваете напрямую к веб приложению для комментов?
если второе, то это не кейс clickhouse
от слов вообще
возьмите MySQL + Vitess или TiDB какой нибудь лучше -
Да, данные аналитические, средние, суммы по периодам и т.п. Но есть несколько связей, вроде рейтинга и комментов к лог записи, две разные таблицы. Постгресс совсем не шустрый, хотя данных около 5Тб всего
-
если аналитика, то UNION ALL нормально подойдет...
-
День добрый. Пытаюсь разобраться с мутациями.
Заметил что в процессе удаление данных через запрос alter table ... delete ..., скачет количество кусков в рамках одной партиции в таблице system.parts до тех пор пока мутации не будет выполнена (is_done = 1).
Скажите пожалуйста, если в дальнейшем заинсёртить данные которые были удалены через мутацию, то количество записей в рамках партиции останется прежним или что то поменяется радикально?
Чем именно мутации отличаются от обычных запросов и как они работают? -
эта сертификация не нами была инициирована . но почему бы и нет, решение и правда у нас сделано 🙂
-
1. да, нормально что количества партов скачет
2. тут 2 варианта - если (1) таблица реплицирована и (2) вы попробуете вставить данные таким же куском, каким они были ранее вставлены и (3) в зукипере осталась информация об этом куске, то может произойти дедупликация на вставку
иначе данные вставятся
3. обычные запросы (insert) вставляют парты, которые в будущем могут смержиться, эти же запросы перезаписывют парты -
добавлю, что можете посмотреть в сторону collapsingMT или replacingMT, если позволяет логика вставки/удаления
слово alter добавлено не просто так - это административный, а не etl запрос
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/collapsingmergetree/
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/replacingmergetree/CollapsingMergeTree | Документация ClickHouseCollapsingMergeTree Движок наследует функциональность от MergeTree и добавляет в алгоритм слияния кусков данных логику с
-
таблица на движке MergeTree.
У нас просто иногда прилетают "плохие данные" и необходимо, их как то оперативно поправить в боевой табличке. В результате мы пока что придерживаемся такой схемы:
1 инсёртим поправленные данные повторно в соседнию таблицу с такими же движком и колонками
2 подменяем партиции (партиция=1месяц)
Но это всё очень долго, и руками надо делать. -
спасибо, поизучаю
-
Спасибо 🤝 А денормализация в этом плане и collapsing merge tree как движок хуже отыграет?
-
вам collapsing нужен потому что у вас delete и update в комментах есть?
-
если вы можете на момент вставки понять, что данные "плохие", посмотрите на material view
-
Угу, спасибо
-
Ага
-
Ну нормально выглядит схема с UNION ALL
но надо делать GROUP BY внутри SELECT которые по union all объединяются
иначе по памяти падать будете на больших выборках -
Спасибо, буду пробовать
-
https://github.com/filimonov/chc
вот такой клиент есть кстати, портабельный вполнеGitHub - filimonov/chc: chc: ClickHouse portable command line clientchc: ClickHouse portable command line client. Contribute to filimonov/chc development by creating an account on GitHub.
-
добрый всем. планируем использовать кликхаус как хранилище для временных рядов. возникли несколько вопросов:
1. есть у кого опыт или ссылками на опыт такого использования (какие подводные камни)?
2. часть метрик у нас являются куммулятивными (монотонно растущими) счетчиками (условно количество принятых сетевым интерфейсом данных ). собственно вопрос стоит ли их хранить в кликхаусе? или лучше хранить только дельты (ибо потом нам зачастую надо получать графики типа сколько было данных за определенный период времени) -
1. нормально clickhouse для временных рядов подходит
а с учетом наличия TLL GROUP BY, можно еще и аггрегацию делать по старым данным
https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttl
VictoriaMetrics во всяких специфичных для TS кейсах побыстрее будет, но у нее специфический язык metricsSQL
2. в clickhouse есть delta кодирование,
https://clickhouse.tech/docs/en/sql-reference/statements/create/table/#create-query-specialized-codecsMergeTree | ClickHouse DocumentationMergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine
-
спсб
-
Здравствуйте, а есть ли какой-то способ узнать вошел ли пул-реквест в конкретную версию докер-образа?
-
да
открываем pull request
ищем в закладке conversations
коммит merged to master
кликаем по коммиту
вверху видим теги в которые вошел коммит с мержем этого PR
они соответсвуют версиям docker image
-lts, -stable публикуются на hub.docker.com -
-
Всем привет!
Собираем логи nginx в clickhouse, поставили задачку отрисовать их в Grafana.
Друзья, ни у кого нет готовеньких дашбордов? -
https://github.com/mintance/nginx-clickhouse
https://github.com/mintance/nginx-clickhouse/blob/master/Grafana-dashboard.jsonGitHub - mintance/nginx-clickhouse: Simple nginx logs parser & transporter to ClickHouse database.Simple nginx logs parser & transporter to ClickHouse database. - GitHub - mintance/nginx-clickhouse: Simple nginx logs parser & transporter to ClickHouse database.
-
Спасибо!
-
-
DateTime64 либо хранить рядом в столбце UInt
-
Спасибо
-
Добрый день.
"Материализованный столбец всегда вычисляется". Значениям в system.total_bytes для таблиц с материализованными столбцами не верить ? Они включают ненулевые (и достаточно приличные) размеры таких столбцов. -
-
Запустили как Вы советовали, пусто в stdout( Нода все так же падает( Можете еще что-нибудь подсказать? Оформлять issue? - но что туда написать? Падение всегда идет с предшествующей ошибкой о интерсекте партов в том же треде(
-
Подскажите, когда делаю селект из паркета, то выдает ошибку, что такого поля нет. Но если например селект топ 10 строк, то все ок.
select Field_1
from hdfs('hdfs://.../year=2021/month=3/day=30/*.parquet',
'Parquet', '`Field_1` String')
Code: 8, e.displayText() = DB::Exception: Column «Field_1» is not presented in input data: While executing HDFS (version 20.5.3.27 (official build))
Это проблема КХ или на hdfs? -
-
Вставка блока в КХ атомарна, или весь блок вставляется, или не вставляется, правильно? Для ReplicatedMergeTree.
-
Добрый вечер.
2 сервера.(21.2.9.41)
на одном делаю attach partition. на инициаторе все добавляется.
на втором ошибка
2021.06.03 15:02:12.522156 [ 100303 ] {} <Error> test.user_test (ReplicatedMergeTreeRestartingThread): void DB::ReplicatedMergeTreeRestartingThread::run(): Code: 27, e.displayText() = DB::P
arsingException: Cannot parse input: expected '\n' before: '202105_0_0_0\npart_checksum: F911597EC8F8EAA8D7763B3DE230A46F\npart_type: Compact\n', Stack trace (when copying this message, always incl
ude the lines below): -
да атомарна, в пределах одного сервера
либо блок вставляется либо нет, если вставился, то уходит на репликацию... через ZK и фетчится другой репликой -
Спасибо!
-
Всем добрый вечер. Подскажите, пожалуйста, как можно выполнить изменение типа столбца в существующей таблице, если указанный столбец является частью первичного ключа таблицы?
-
если вставка идет в ReplicatedMergeTree таблицу то если у вас два блока с одинаковой контрольной суммой (два раза запустили INSERT INTO ... SELECT ... и remote Таблица не менялась за это время)
сработает
insert_deduplicate
и
eplicated_deduplication_window
https://clickhouse.tech/docs/en/operations/settings/merge-tree-settings/#replicated-deduplication-window
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-insert-deduplicateMergeTree tables settings | ClickHouse DocumentationMergeTree tables settings The values of merge_tree settings (for all MergeTree tables) can be viewed in the table system
-
Столбец имеет тип Enum8, я хочу только расширить те значения, которые содержатся в данном перечислении. Какая для этого предусмотрена последовательность действий?
-
никак, новая таблица и INSERT INTO ... SELECT
-
ALTER TABLE .. MODIFY COLUMN ..
ошибку возвращает?
что там написано? -
Code: 44, e.displayText() = DB::Exception: Trying to ALTER key column eventtype
-
только новая таблица и в неё insert into ... select ?
-
https://github.com/ClickHouse/ClickHouse/issues/9645
Такое ощущение что парт у вас от какой то старой версии chBroken replication after upgrading to 20.3.2.1 · Issue #9645 · ClickHouse/ClickHouseDescribe the bug or unexpected behaviour Broken replication after upgrading to 20.3.2.1 How to reproduce Which ClickHouse server version to use 20.1.6.30 -> 20.3.2.1 CREATE TABLE statements ...
-
угу, новая таблица + INSERT INTO ... SELECT
-
как это проверить? Перефразирую: каким запросом сравнить выбранные даны локальной таблицы и remote ?
-
Добрый день! пытаюсь кх скормить csv и он ругается на благим матом, за что и почему не пойму.
Code: 27, e.displayText() = DB::ParsingException: Cannot parse input: expected '"' before: 'ad_id","ad_title","ad_group_id","group_name","campaign_id","campaign_name","target_id","status_id","status","user_id","created_at","deleted_at","archived_at","u' (version 21.5.6.6 (official build)) -
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x87a28ba in /usr/bin/clickhouse
1. DB::throwAtAssertionFailed(char const*, DB::ReadBuffer&) @ 0x87f8a97 in /usr/bin/clickhouse
2. ? @ 0xedb8366 in /usr/bin/clickhouse
3. DB::SerializationNumber<unsigned long>::deserializeTextCSV(DB::IColumn&, DB::ReadBuffer&, DB::FormatSettings const&) const @ 0xedb0dd5 in /usr/bin/clickhouse
4. bool DB::SerializationNullable::deserializeTextCSVImpl<bool>(DB::IColumn&, DB::ReadBuffer&, DB::FormatSettings const&, std::__1::shared_ptr<DB::ISerialization const> const&) @ 0xedab714 in /usr/bin/clickhouse
5. DB::CSVRowInputFormat::readRow(std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::mutable_ptr<DB::IColumn> > >&, DB::RowReadExtension&) @ 0xfe64753 in /usr/bin/clickhouse
6. DB::IRowInputFormat::generate() @ 0xfe44208 in /usr/bin/clickhouse
7. DB::ISource::tryGenerate() @ 0xfdd3135 in /usr/bin/clickhouse
8. DB::ISource::work() @ 0xfdd2d1a in /usr/bin/clickhouse
9. DB::ParallelParsingInputFormat::InternalParser::getChunk() @ 0xfe98c7e in /usr/bin/clickhouse
10. DB::ParallelParsingInputFormat::parserThreadFunction(std::__1::shared_ptr<DB::ThreadGroupStatus>, unsigned long) @ 0xfe9821e in /usr/bin/clickhouse
11. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x87e5618 in /usr/bin/clickhouse
12. 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()() @ 0x87e6fdf in /usr/bin/clickhouse
13. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x87e2b5f in /usr/bin/clickhouse
14. ? @ 0x87e6083 in /usr/bin/clickhouse
15. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
16. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.5.6.6 (official build))
Code: 27. DB::ParsingException: Cannot parse input: expected '"' before: 'ad_id","ad_title","ad_group_id","group_name","campaign_id","campaign_name","target_id","status_id","status","user_id","created_at","deleted_at","archived_at","u':
Row 1:
Column 0, name: ad_id, type: UInt64, parsed text: "<DOUBLE QUOTE>"ERROR
Code: 27, e.displayText() = DB::ParsingException: Cannot parse input: expected '"' before: 'ad_id","ad_title","ad_group_id","group_name","campaign_id","campaign_name","target_id","status_id","status","user_id","created_at","deleted_at","archived_at","u' (version 21.5.6.6 (official build)) -
он не может найти двойную кавычку перед ad_id
-
-
ну SELECT count() FROM db.table WHERE ...
сравнить с
SELECT count() FROM remote() WHERE ...
для начала -
всю строчку покажи
-
-
это первая строка?
а как INSERT запрос выглядит? -
да это первая строка, я два варианта пробовал:
cat ads_202106031823.csv | clickhouse-client --query="INSERT INTO ads.ads FORMAT CSV"
clickhouse-client --query="INSERT INTO ads.ads FORMAT CSV" < ads_202106031823.csv -
FORMAT CSVWithNames
надо -
ну и названия колонок должны соответствовать полям в БД
-
боже это гениально) спасибо
-
Подскажите кто использовал Predefined HTTP Interface в режиме predefined_query_handler? У меня почему-то не заработало даже с примером из документации. Версия 20.12. Пишет empty query. И не до конца понял что должна распарсить регулярка из url. По логике должна получать значения параметров, а как я понял в примере получает названия этих параметров
-
это я вообще хочу восстановить партицию, которую снял с другого сервера. у другого сервера версия така же, то есть у всех 3-х версии одинаковые.
у меня немного другая ошибка -
-
А сколько строк в таблице и index_granularity
-
Гранулярность 256 - строк больше 3ккк
-
А зачем вам такая гранулярность?
-
Чтобы с диска меньше читалось.
-
А размер блока сжатия вы меняли?
-
да, вижу, действительно странно... чего то ей не хватает
-
Не совсем, кликхаус же сжимает данные поблочно, и в худшем случае придется прочесть весь блок сжатия. и в среднем будет прочитана половина блока сжатия.
min_compress_block_size │ 65536 │ 0 │ The actual size of the block to compress, if the uncompressed data less than max_compress_block_size is no less than this value and no less than the volume of data for one mark. -
Если вы указываете маленькую index_granularity, из за большого блока сжатия от нее смысла не много.
-
Нет, не меняли.
-
таблицы были созданы на немного старой версии КХ, пересоздал таблицы и все аттачнулось.
-
Правильно ли я понимаю , что дефолтное значение подходит к дефолтному значению гранулярности? Таким образом, в моем случае, уменьшать нужно пропорционально? Или это сугубо на тестах определяется ?
-
min_compress_block_size в байтах, те это 65кб
если мы берем какую нибудь колонку UInt64, то получается ~ 8 mark.
> Таким образом, в моем случае, уменьшать нужно пропорционально?
В теории да, на практике теряется смысл от сжатия и кол-во прочтенных данных с диска не уменьшается пропорционально -
Благодарю.
-
MergeTree + ReplacingMergeTree/EmbeddedRocksDB
-
А сколько строк вообще?
-
К сожалению нельзя стек расширять (
-
4.5 терабайта где-то, но это за 7 лет, в строке колонок 15 примерно, небольшие.
-
5% данных это сотни гб данных
-
В какой момент времени эта заметка будет оставлятся?
-
Вот на это ограничений нет, но как правило в течении дня
-
И потом она уже не меняется?
-
В целом да, в большинстве случаев
-
И сколько в день таких комментов нужно подцепить? можно ли это сделать батчем?
-
табличная функция mysql поддерживает селект и инсерт, а в доке по движку mysql написано только про инсерт.
я правильно понимаю, что дока немного устарела? я нашёл issue на гитхабе на эту тему двухгодовалой давности:
https://github.com/ClickHouse/ClickHouse/issues/7745 и завёл пулреквест на обновление доки https://github.com/ClickHouse/ClickHouse/pull/24937
но сейчас немного засомневался, всё ли я правильно понял? ... иначе нафига у него опции on_duplicate_clause и replace_query
https://clickhouse.tech/docs/ru/engines/table-engines/integrations/mysql/
https://clickhouse.tech/docs/ru/sql-reference/table-functions/mysql/ -
я так понял, что ничего расширять не надо. rocksdb уже embedded в кликхаус
https://clickhouse.tech/docs/ru/engines/table-engines/integrations/embedded-rocksdb/EmbeddedRocksDB | Документация ClickHouseДвижок EmbeddedRocksDB Этот движок позволяет интегрировать ClickHouse с rocksdb. Создание таблицы CREATE TABLE [IF NOT E
-
Group by вообще по ключу избавляет от несколлапсеных строк? Я думаю может предварительно делать вставку пустых данных в коллапсинг таблицу в соответствии с основной, чтоб потом упростить запись месячного отчёта в файл просто за счёт того что число строк будет одинаково.
-
Подскажите как лучше посчитать скорость изменения счётчика. Условно есть монотоннорастущий счётчик , мне необходимо получать скорость его изменения за промежуток времени ( в идеале в значений в секунду). По сути нужен некий аналог оконных lag/lead функций ( ну или increase promql) Я нашел в документации, что есть оконные функции, но они вроде помечены экспериментальными.
Навскидку приходит простейшая конструкция типа group by по временным интервалам (например в две секунды) и вычисления разности между агрегатами max и min. Но возможно есть более правильный способ? -
Если вы можете апгрейднутся до 21.3 и использовать оконки, то проще использовать оконки
-
Ещё раз пересмотрел доку. Там написано, что помимо этого lag все равно не поддерживается :(. Так что похоже оконки не вариант
-
там можно съэмулировать лаг через any, либо в 21.4 есть уже обычный лаг
-
-
Понятно. А если нет возможности перейти на последнюю. То как через group by сделать оптимально?
Я так понимаю any берет первое попавшееся. И это не всегда детерминировано.. -
Ну тогда нужно думать, с какой точностью вам нужно отдавать результаты, сколько строк в одной секунде
-
Какое окно должно быть
-
А простой max - min насколько плох?
Точность не сильно важна. Строк в секунде до десятка. Счётчик либо монотонно растет. Либо сбрасывается. В ноль и дальше опять растет -
Если точность устраивает, то ок.
Если строк на входе не очень много (до сотен тысяч) можно посмотреть на runningAccomulate -
Ясно спсб
-
https://kb.altinity.com/altinity-kb-queries-and-syntax/cumulative-unique
Тут не совсем оно, но почерпнуть что то можно
Есть еще вариант с arrayJoin -
сколько тасков хранить в ЗК для on cluster запросов. Если сервер оффлайн больше недели то он не выполнит свое on cluster задание
-
КМК в Яндексе clickhouse используется как embedded библиотека в некоторых проектах
-
не понял вопроса, вот почитайте мои примеры https://kb.altinity.com/altinity-kb-queries-and-syntax/ttl-group-by-examples
возможно вам нужен optimize table deduplicate by (a,b,c)TTL GROUP BY ExamplesTTL GROUP BY -- a feature which allows to roll-up old rows. For example to reduce data granularity to one hour for rows older than one month.
-
Cache никогда не был российским
-
это скорее всего баг/иша в версии 21.5.5 , какая у вас версия КХ ?
-
будет заатачена везде, на второй реплике со временем
-
Я щас еще разок подумал, мне даже не надо никаких условий, мне надо просто удалить рандомные 99% старых строк
-
да, атомарность на уровне партов. Про миллион это лажа. Даже 3 строки могут создать 3 парта.
-
alter table delete .... where someid % 101 <> 0
-
А по TTL это можно сделать?
-
Да, именно она. 21.5.5
-
можно, но тут думать надо, а мне лень думать.
-
вот лекарство
cat /etc/clickhouse-server/users.d/min_bytes_to_use_mmap_io.xml
<?xml version="1.0"?>
<yandex>
<profiles>
<default>
<min_bytes_to_use_mmap_io>0</min_bytes_to_use_mmap_io>
</default>
</profiles>
</yandex> -
Спасибо!!
-
да нет конечно, прямо в MergeTree таблице полем
-
мутации вообще никакого отношения не имеют к инсертам, мутации скорее мержи. Мутации delete перезаписывают парты без удаленных строк, очень тяжелая операция, рекомендуется выполнять раз в году.
-
вам нужны SummingMergeTree и materialized view. Но да VictoriaMetrics более специализирован и надо его сначала смотреть
-
Introduction to the Mysteries of ClickHouse Replication
Built-in replication is a powerful #ClickHouse feature that helps scale #DataWarehouse performance as well as ensure high availability. In this webinar (July 31, 2019), Robert Hodges and Altinity Engineering Team introduce how replication works internally, explain the configuration of clusters with replicas, and show you how to set up and manage #ZooKeeper, which is necessary for replication to function. We finish off by showing useful replication tricks, such as utilizing replication to migrate data between hosts. Join us to become an expert on this important subject! Speaker Bio: Robert Hodges is CEO of Altinity, which offers enterprise support for ClickHouse. He has over three decades of experience in #DataManagement spanning 20 different #DBMS types. ClickHouse is his current favorite. ;) Presentation slides for this webinar can be found here: https://bit.ly/2KO9lIY #OpenSource ----------------- Enjoy more value-packed Altinity webinars here: https://www.altinity.com/webinarspage Or check out ClickHouse…
-
вычисляются и записываются на диск в момент инсертов и мержей. Вам нужен тип Alias
-
Спасибо!
-
да, основная проблема узнать как формируется блок в каждом конкретном случае
-
разные версии КХ на репликах?
-
удалить и вставить строки назад с обновленным полем
-
Уже делаю это, спасибо🙏🙏🙏
-
в новых КХ должно работать
-
Позже обновлюсь
-
так не все засечки нужны постоянно, какая разница сколько они весят. Это первичный ключ в памяти всегда.
-
Версии были одинаковые. Но таблица на новом была создана, когда ещё стояла версия ниже.
-
А как с апдейтом поля быть?
-
а вообще что подразумевается под апдейтом? Типа словарь? Может использовать ext.dictionary ?
-
Оставление комментария небольшого к записи
-
и сколько будет примерно в тысячах коммертариев всего?
-
Предположительно 1кк строк, и 10к комментариев
-
-
можно просто тогда сделать словарь и 10к коментариев брать оттуда. Словарь можно сделать поверх ReplacingMergeTree или поверх EmbeddedRocksDB.
EmbeddedRocksDB достаточно быстр и для direct словарей если использовать NVME https://kb.altinity.com/engines/altinity-kb-embeddedrocksdb-and-dictionary -
Спасибо, а словарь это по сути как коннектор, который в качестве источника использует внешние хранилища? Пока схема такая:
1) pg_amqp коннектор
2) кластер для пайплайна и препроцессинга
3) кластер кидает в обменник из него батчинг в rabbitmq таблицу, из нее создаём materialized view с merge tree типом
4) ??? словарь из pg таблиц с обновляемыми данными
Но вот про словари не исследовали даже -
Да. Можно pg в качестве источника для словаря
- 04 June 2021 (160 messages)
-
Спасибо!
-
ну может быть, для CHYT ;) но они это не публикуют
-
Все доброе утро.
У меня вопрос, граничащий с абсурдом (т.е. жизненный).
Как можно ходить в КХ из Delphi помимо http?
Увидел clickhouse-odbc, попробую, но кмк - это тоже не быстро -
ходите по HTTP
в чем проблема?
какая версия Delphi? эмбакадеровская или Delphi7 ? -
эмбаркадеровская, 10
-
программеры сразу стонать начинают "вооот, это ответ же парсить наадо...."
-
попробую подключить линкованным сервером к мсскулю
-
GitHub - gutierrydsn/http-request-for-Delphi: lib for do request http
lib for do request http . Contribute to gutierrydsn/http-request-for-Delphi development by creating an account on GitHub.
-
дожили, программеры на Дельфи которые в 2021 году не знают библиотек которые нормально с HTTP работают?
и гуглить не умеют? -
С хттп то они работают, с этим проблем нет.
Им не нравится то - что ответ КХ надо распарсивать, там же (если я правильно понимаю) возвращается условная csv-шка? -
ответ clickhouse делается в формате FORMAT JSON
и парсить JSON этот очень просто -
базара нет, если умеют с ODBC работать. пусть работают с ODBC
-
Просто, не спорю, но "это медленно же"
-
Добрый день
Подскажите пожалуйста, есть ли у кх что то вроде linked server, как у ms sql?
Если есть то где про это можно почитать? -
Как я понял - https://github.com/ClickHouse/clickhouse-odbc
и подключаешь как линкованный серверGitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouseODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
Или наооборот? подключить другие сурсы к КХ?
Тогда так https://clickhouse.tech/docs/ru/engines/table-engines/integrations/odbc/ODBC | Документация ClickHouseODBC Позволяет ClickHouse подключаться к внешним базам данных с помощью ODBC. Чтобы использование ODBC было безопасным,
-
Надо из сидя на одной бд, к примеру делать select на другую
-
Вот это больше похоже)
-
там еще варианты, помимо богомерзкого одбц
-
https://github.com/viniciussanchez/RESTRequest4Delphi
https://webdelphi.ru/2019/03/rabota-s-json-v-delphi-10-3-rio/
вот две ссылки, поверх них какой нибудь враппер написать и сделать клиент, это работа на 1-2 дня...GitHub - viniciussanchez/RESTRequest4Delphi: API to consume REST services written in any programming language with support to Lazarus and DelphiAPI to consume REST services written in any programming language with support to Lazarus and Delphi - GitHub - viniciussanchez/RESTRequest4Delphi: API to consume REST services written in any progra...
-
Спасибо, попробую заставить их вникнуть
-
я вроде через remote подключал удаленный сервер
-
"сидя на одной БД" имеется ввиду с одного сервера ClickHouse на другой ClickHouse запросы делать?
https://clickhouse.tech/docs/en/sql-reference/table-functions/remote/remote | ClickHouse Documentationremote, remoteSecure Allows to access remote servers without creating a Distributed table. remoteSecure - same as remote
-
Во! Да, то что надо, спасибо!
-
ну кстати если напишете HTTP клиент на delphi не забудьте скинуть мне ссылку
или сделать pull request вот на этот файл
https://github.com/ClickHouse/ClickHouse/blob/master/docs/en/interfaces/third-party/client-libraries.mdClickHouse/client-libraries.md at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Хорошо. Но это если получится их заставить, они ж в вечном цейтноте
-
либо вас дурят =)
либо вашему продукту clickhouse не нужен вообще =)
либо у вас не delphi программеры, а любители рассказывать "какой дельфи старый и неудобный" ;)
либо кучка старперов которым программировать уже чисто физически тяжело... -
-
Думаю истина гдето посередине %)
-
Только старым и неудобным его не называют
-
Уважаемые, подскажите, что надо поменять? После подъема версии c 20.6 на 21.3 clickhouse, размещённый в виртуалке внутри RHV начал ругаться. Точнее, в логи пишет SELinux: SELinux is preventing /usr/bin/qemu-ga from using the dac_read_search capability. Конфиг кликхауса не менял.
-
https://github.com/ClickHouse/ClickHouse/search?q=dac_read_search
у вас там нету же никакого Kerberos и HDFS?
вы гуглили?
https://danwalsh.livejournal.com/77140.htmlSearch · dac_read_search · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
где то видимо clickhouse зачем то захотел читать файлы без проверки прав доступа
ну для скорости наверное... -
Ух ты, а ещё кто делает новые вещи на дельфи?
-
они там живут себе в полностью параллельной реальности))
-
Коллеги, добрый день! Можно ли как то с помощью VIEW добиться аналога создания olap куба. Вот, что я имею ввиду:
У меня есть запрос с параметрами в Redash (основной параметр -временной промежуток), который группирует данные и выводит их в должном виде. Я могу создать View из этого, но как можно передавать параметр времени? или это уже мои фантазии... -
-
Костыль правда
-
ну, это как 1С но на западе =)
то есть уже далеко не main stream
но наверняка нишевые адепты остались
иначе емакадера развалилась бы нафиг... -
у меня цель то в общем простая, создать такую View, к которой можно обращаться, подключаясь из Excel
-
Но как передавать параметр в таком случае...
-
Смотрели в таком случае?
https://altinity.com/blog/accessing-clickhouse-from-excel-using-mondrian-rolap-engineAccessing ClickHouse from Excel using Mondrian ROLAP engineClickHouse is a very powerful database for analytics. Microsoft Excel is one of the world’s most popular business applications. There are several ways to bring ClickHouse data to Excel spreadsheets. In this article we will explain how to connect Excel to ClickHouse using the Mondrian OLAP server. This approach has been pioneered in Sergei Semenkov’s[...]
-
Ексель как раз одна из немногих штук, что работает
-
нужен OLAP
подключайтесь через OLAP
;)
но проще тупо по ODBC через запрос в лист отдельный данные вытащить, а потом уже их в pivot таблице крутить и фильтровать -
Согласен, этот вариант у меня работает, просто хотел использовать свой сложный запрос с кучей группировок для простых пользователей, но сложность как раз в том, что если я создам view, то передать параметр при подключении через эксель будет сложно...
-
Спасибо, буду изучать)
-
только через VBA какой нибудь
https://support.microsoft.com/en-us/office/customize-a-parameter-query-addf7cb7-ddf0-442f-a60c-cd7280e201bd#:~:text=with%20the%20query.-,On%20the%20Data%20tab%2C%20in%20the,%26%20Connections%20group%2C%20click%20Properties.&text=click%20Connection%20Properties%20.-,In%20the%20Connection%20Properties%20dialog%20box%2C%20click%20the%20Definition%20tab,value%20from%20the%20following%20cell.Customize a parameter queryYou can customize a Microsoft Query parameter query by changing the prompt, by using data from a cell as the prompt, or by using a constant.
-
Спасибо за помощь, понял, что вопрос возможно решаемый...
-
у нас здоровенное наследие, все переписать невозможно, поэтому есть три дельфиниста, которые продолжают пилить, озабоченно смотря по сторонам
-
кобол наших дней
-
в научных пакетах до сих пор многое живет на коде из 80-х
-
на языках название которых многие даже не знают
-
Подскажите, а как можно преобразовать тип Tuple из одинаковых типов в Array?
-
Найдено. Каталоги, указанные в disks и используемые в storage policy он так читает. Действительно, помимо повышения версии, еще диск добавили.
-
Всем привет
Нужно выгрузить колонку,содержащую json строку
Использую для выгрузки формат format JSONEachRow
В полученном файле все кавычки экранированы слешами
пример \"email_domain\":\"gmail.com\"
Как уйти от слешей,чтоб возвращался валидный json,может другой формат или опция? -
круто думаю стоит issue на github завести, с меткой question
-
Input and Output Formats | ClickHouse Documentation
Formats for Input and Output Data ClickHouse can accept and return data in various formats. A format supported for input
-
-
Пробовал этот формат,получал след ошибку (наверное этот формат не для выгрузки,а только для загрузки)
DB::Exception: Format JSONAsString is not suitable for output -
Вам нужно сделать валидный JSON весь или то как делает JSONEachRow нормально?
TSVRaw пробывали? -
Как JSONEachRow нормально было бы
Попробовал TSVRaw,выгрузилось без экранирования,спасибо -
поискать можно ли в DataGrip сессии выключить
-
Добрый день,
Подскажите, в чём может быть причина ошибки? clickhouse-server не стартует.
2021.06.04 13:34:02.339473 [ 3460 ] {} <Error> Application: DB::Exception: Listen [::]:8123 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = DNS error: EAI: Address family for hostname not supported (version 21.5.6.6 (official build))
В config.xml пробовал разные варианты прописывать в listen_host, но ничего не меняется... -
IPV6 на сервере отключен вообще
-
Где кх запускаете, есть поддержка ipv6?
-
Ага
-
<listen_try>1</listen_try>
-
Добавьте настройку
-
IPV6 нет. Но в конфиге я прописываю так:
<listen_host>0.0.0.0</listen_host> -
Помогло. Та ошибка ушла, но теперь другая появилась.
<Error> Application: DB::Exception: No servers started (add valid listen_host and 'tcp_port' or 'http_port' to configuration file.) -
Listen [::]:8123
Ну кх явно пытается на ipv6 слушать -
А что вы конкретно в конфиге меняли?
-
Ну, вот как написано, так и прописал. Сейчас прописал название хоста в listen_host, но тоже не помогло
-
'tcp_port' or 'http_port'
Не комментировали? -
Нет
<http_port>8123</http_port>
<!-- Port for interaction by native protocol with:
- clickhouse-client and other native ClickHouse tools (clickhouse-benchmark, clickhouse-copier);
- clickhouse-server with other clickhouse-servers for distributed query processing;
- ClickHouse drivers and applications supporting native protocol
(this protocol is also informally called as "the TCP protocol");
See also 'tcp_port_secure' for secure connections.
-->
<tcp_port>9000</tcp_port> -
clickhouse extract-from-config --config-file /etc/clickhouse-server/config.xml --key listen_host
-
А если так?
-
-
# clickhouse extract-from-config --config-file /etc/clickhouse-server/config.xml --key listen_host
::
wtf? Откуда он это берёт? -
Вот, что нашёл. В папке /etc/clickhouse-server/config.d есть файл listen.xml
В нём:
<yandex>
<listen_host>::</listen_host>
</yandex> -
Поменял на
<yandex>
<listen_host>0.0.0.0</listen_host>
</yandex> -
Вроде, запустился клик. Пытаюсь подключиться теперь...
clickhouse-client --host srv-servername-clickhouse01
ClickHouse client version 21.5.6.6 (official build).
Connecting to srv-servername-clickhouse01:9000 as user default.
Code: 516. DB::Exception: Received from srv-servername-clickhouse01:9000. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name. -
Вроде, попал в БД:
SELECT 1;
SELECT 1
Query id: 899c9dc8-ce30-4cfa-a87f-fb77fc35f416
┌─1─┐
│ 1 │
└───┘
1 rows in set. Elapsed: 0.001 sec.
@unamedrus спасибо за помощь 👍🏻 -
Всем привет. Вопрос. При перезапуске clickhouse все внешние словали обнулятся?
-
да, они в памяти хранятся
загружаться будут при попытке сделать dictGet .. или после LIFETIME окна
или после SYSTEM RELOAD DICTIONARIES можно сделать принудительно -
thx
-
-
Можно ключи прописать для определенного пути/бакета
-
How to query data on AWS S3 using ClickHouse S3 table engine and table function in a secure way? · Issue #18721 · ClickHouse/ClickHouse
I'm using ClickHouse 20.12.5, and I would like to query the data on Amazon S3. The storage is supported with table engine and table function, but it needs AWS Access Key and Secret Key for ...
-
-
премного благодарен за пример
-
Подскажите, пожалуйста, будет ли существенный профит в использовании для таблицы движка JOIN вместо MergeTree, если таблица используется как ANY LEFT JOIN и в ней около 10 тыс. записей?
-
Смотря как часто используется, возможн вообще может ее запихать в словарь
-
-
В словарь? Там за раз пару десятков полей вытаскивается.
-
А, ну тогда вопрос как часто используется в запросах
-
В смысле, частота обращений в секунду/минуту?
-
Это пока трудно предугадать
-
Да
-
Ну, т.е. JOIN всегда в памяти сидит, а MergeTree будет каждый раз заново читаться?
-
Да и строить хештаблицу
-
-
если запросы очень часто выполняются, то это может быть проблемой
-
Ясно. Спасибо!
-
Всем привет!
есть таблица условно
key | datetime | longitude | latitude
таблица ENGINE=MergeTree
есть ли какой-то способ для значений по строкам агрегировать координаты через greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)?
т.е. условно считаем, что все записи это последовательная запись гео-координат и нужно посчитать суммарное пройденное расстояние на поверхности земли -
-
config
<dictionaries_lazy_load>false</dictionaries_lazy_load> -
непонял про "external dictionary .. not found "
-
-
между чем и чем? между каждой строки с каждой?
-
последовательно... условно данные льются и для простоты даты считаем как 1,2,3,4,...
и каждое время имеет свою координату - агрегация 1->2->3->4..... т.е. сумма последовательных расстояний -
нет не получится, в ETL надо делать
-
понял, спасибо
-
select dictGetString('dict_oe', 'org_unit', tuple('338017a1-3c75-411a-9b22-cf3082073637'))
SELECT dictGetString('dict_oe', 'org_unit', tuple('338017a1-3c75-411a-9b22-cf3082073637'))
Received exception from server (version 20.8.4):
Code: 36. DB::Exception: Received from localhost:9000. DB::Exception: external dictionary 'dict_oe' not found.
Поставил меньшие - LIFETIME(MIN 2 MAX 3) и вроде стало норм обрабатывать -
звучит как баг.
20.8.4 это очень ранний релиз. Обновитесь до 20.8.18.32 -
Можно ли как-то изящнее написать проверку на пустое значение, чтобы если пустое отдавать null?
if (_provider = '', null, _provider) as provider -
nullIf
-
Класс, спасибо
-
-
-
Тут в другую сторону, но идея таже
-
Всем привет, можете подсказать как составить запрос?
вопрос скорее больше по SQL
есть таблица в сlickhouse
id | Price | Time
На вход два обязательных параметра, даты from и to
нужно получить цену когда Time = from и цену Time = to
т.е. результат такой
id | PriceFrom | PriceTo -
у меня проблема с Distibuted таблицами
rename table ordinary_db.distributed_table to atomic_db.distributed_table
Code: 1000. DB::Exception: Received from clickhouse-server:9000. DB::Exception: File not found: /var/lib/clickhouse/data/ordinary_db/distributed_table
хотя папка на месте... -
anyIf(Price,Time=from) as PriceFrom,anyIf(Price,Time=to as PriceTo
-
Да Distributed просто пересоздать можно
-
-
Тогда нужно думать, и кмк ручных действий будет много, проще было бы пересоздать
-
-
Ну написать на гитхаб ничего не мешает :)
-
Сработало, Большущее вам спасибо
-
Привет
Подскажите пож, столкнулся с каким то странным поведением left join
Select month, col1, col2, sum(col3)
From table_1
Left join table_2 on (month, k1, k2, k3, k4)
Where table_1.col2 = 1 and table_1.month = 202112
В присоединяемой таблице значений по фильтрующему месяцу нет.
А итог выводИт почему то из таблицы 1 значение col2 не равному фильтру (не только значение 1, но и 2) -
Притом, если убрать фильтр по месяцу, то выводит корректно
Это я не вижу ошибку или баг? -
Максимально упростил для наглядности
-
Что-то всё равно:
clickhouse-client --query="select * from system.dictionaries Format Vertical"
Row 1:
──────
database:
name: dict_oe
uuid: 00000000-0000-0000-0000-000000000000
status: NOT_LOADED
origin: /etc/clickhouse-server/oe_dictionary.xml
type:
key:
attribute.names: []
attribute.types: []
bytes_allocated: 0
query_count: 0
hit_rate: 0
element_count: 0
load_factor: 0
source:
lifetime_min: 0
lifetime_max: 0
loading_start_time: 1970-01-01 00:00:00
last_successful_update_time: 1970-01-01 00:00:00
loading_duration: 0
last_exception:
clickhouse-client --query="select dictGetString('default.dict_oe', 'org_unit', tuple('338017a1-3c75-411a-9b22-cf3082073637'))"
Received exception from server (version 20.8.18):
Code: 36. DB::Exception: Received from localhost:9000. DB::Exception: external dictionary 'default.dict_oe' not found. -
-
вкладка "output" или добавьте explain перед запросом, смотря что вам нужно
-
Explain не работает
Версия старая
Мне нужен план запроса -
Нет там. Только через CLI
-
Поняла, спасибо
-
значит вашей версии как минимум полтора года, попробуйте обновиться хотя бы на LTS (21.3)
-
словарь через XML создан?
тгда у него имя просто dict_oe
без default
и dictGetString должен сработать -
Уй, спасибо, сработало
-
-
Народ!
Я вот только присоединился тут... могу задать глупый вопрос, не злитесь )
Очень нужно быстро прокачать группу администраторов (часть из них тут сидит) на предмет кластеризации кликхауза... как добавлять ноды правильно, как удалять, что происходит когда вылетает нода, как переезжают данные в случае масштабирования (добавления)... в общем нежен очень качественный (админы толковые, просто именно с кликхаузом нет опыта) персональный тренинг для 2-4х админов.
Где можно такое найти? буду благодарен, если кто-то подскажет... -
arrayJoin(groupArrayUniq(JSONExtact(...)))
или ARRAY JOIN -
Спасибо
-
ClickHouse Training Built For Your Use Case — Altinity
Design high-performance analytic apps, optimize SQL queries, set up secure ClickHouse clusters, replicate data with Altinity’s ClickHouse training series. Lab exercises included!
-
так он не default. Он просто dict_oe. XML словари не имееют базы
-
еще нас бы всех то-нибудь этому научил
-
а если поле вычисляемое через dictget назвать не Version, и во внешенм запросе вывести оба (version)?
-
Я готов заплатить за ускоренное получение знаний :) и я уже получил 3 фидбэка в личку! (Достойных!)
-
Там в словаре version в конце пробел , как раз для этого )
При попытке вывода с двух таблиц версии - ругается что нет такого столбца во второй таблице
Его там и правда нет (по полному ключу в using совпадений в правой нет) -
Самое забавное, что если убрать в фильтре месяц, то он не выводит лишнее значение версии
-
а если убрать join то что?
-
Если вообще не джойнить таблицу, то уникальное значение одно, которое в фильтре
-
или написать t1.Month -- тут ошибка кстати должно быть, что поле ambiguous, оно в двух таблицах
-
Ее кстати не было, и с t1 то же самое (
-
да баг тогда
-
какая версия КХ ?
-
21.5.5.12
- 05 June 2021 (28 messages)
-
/report
-
Внезапно обнаружил что у if всегда выполняются оба выражаения
if
Условное выражение. В отличии от большинства систем, ClickHouse всегда считает оба выражения then и else.
https://clickhouse.tech/docs/ru/sql-reference/functions/conditional-functions/#uslovnye-funktsii
Как можно это обойти
Проблема в том, что в моем случае иф базируется на знаниях словаря (памяти), и только если там нет ничего, начинаются операции со строками, в else.
Но это все получается бесполезно если выполняются оба условияУсловные функции | Документация ClickHouseУсловные функции if Условное выражение. В отличие от большинства систем, ClickHouse всегда считает оба выражения then и
-
Решил проблему. Помогает prewhere. В этом случае не багует
-
Можно посмотреть explain syntax для оригинального запроса, там есть оптимизации на уровне синтаксиса, возможно они что-то ломают.
А можете сделать минимальный пример, на котором воспроизводится проблема? CREATE запрос, INSERT нескольких строк данных и SELECT -
всем привет. только у меня https://clickhouse.tech/ не открывается _в ms edge_ или у вас тоже?
err code: STATUS_BREAKPOINT -
только у вас
-
спасиб. уж собрался баг-репорт их фронтам писать... видимо чтото у меня
-
-
WHERE bOrder=1
не получается? -
-
В селектах тоже дубли
-
-
-
-
Подскажите, пытаюсь настроить predefined http. В конфиге всё без ошибок, но при попытке сделать запрос http пишет что handler не существует. Делал по примеру из документации. Не знаю куда копать
-
-
Localhost:8123/hi error 404. There is no handle /hi. И это не просто http, а созданная мной конечная точка. Обычный http запрос работает типа /ping
-
Может argMax() поможет?
-
По полю sequence
-
Нет, агрегирования функция в запросе. Выдает ошибку
-
Смоделировать ошибку не смог(
Когда инсертил в тестовые таблицы значения из изначальной - ломалось, когда через values - норм... -
Подскажите, в какой из системных таблиц можно посмотреть проблему вставки через materialized view? Периодически, при повышении потока вставки в основную таблицу, не проходит вставка.
-
Ни в какой. Только в логах. На самом деле это очень сложно представить. Это возможно только если запрос падает с ошибкой. Из-за багов иногда запросы падают молча.
-
Схема простая: данные идут в долгосрочную таблицу для архива и, через materialized view, в краткосрочную для частых широких запросов.
-
В логах запросов или поднимать до debug уровень системного журнала процесса?
-
Я вообще никогда ниже trace не включаю.
-
у меня тоже вкладки chromium с clickhouse.tech почему-то стали падать :) конечно абсолютно точно проблема на моей стороне, надо разбираться, но больше нигде не воспроизводится
-
- 06 June 2021 (54 messages)
-
Такая же фигня. В хроме - падают, в фф - норм
-
Привет. Столкнулся с не понятием)
Создал таблицу SummingMergeTree, складываю туда данные, они схлопываются. Я почему то предполагал что схлопывание идет через any(), типа в одной колонке строки есть значение, в других строках там нет т. Е null. При схлопывание, колонка будет иметь значение, не null... оказалось, что берет любое значение даже null.
Какой движок посоветуете для моих целей? AggregatingMergeTree по такому же принципу схлопывается? -
-
DB::Exception: Aggregate function groupArray(eventName) is found in WHERE in query: While processing groupArray(eventName) AS gEventName (version 21.5.6.6 (official build))
-
а есть какое нибудь поле типа sessionid ?
-
sessionTimestamp
-
-
это не sesionid
слишком мало уникальности и слишком много дублей
придется делать через отдельную таблицу
CREATE TABLE order_sessions ...;
INSERT INTO order_sessions Select sessionTimestamp, groupArray(eventName) as gEventName, arrayExists(x->(x='bOrder'),gEventName) AS bOrder;
SELECT * FROM order_session WHERE bOrder=1; -
Дублей нету почти
-
А под запросами не правильно будет писать? WITH
-
подзапросы памяти много жрать будут...
в принципе если памяти много, то можно вот так
SELECT * FROM (SELECT ... ) WHERE bOrder=1 -
Пока локальное все и много памяти.... И правильнее через `WITH или `SELECT * FROM (SELECT ... )?
-
а разве не в having должно быть условие на агр. функцию?
-
это все равно стримится, ни при чем тут память
-
Да работает, но теперь памяти не хватает))
Memory limit (for query) exceeded: would use 9.32 GiB (attempt to allocate chunk of 137578518 bytes), maximum: 9.31 GiB: While executing AggregatingTransform -
это просто для облегчения понимания я так написал, надо поправить доку, там любое значение берется.
используйте SimpleAggregateFunction(any,Nullable(String)) -
версия КХ ? И без having типа работало?
-
21.5.6.6 без него вообще не работало
-
set max_bytes_before_external_group_by='5G'
-
Не помогает,
e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.31 GiB (attempt to allocate chunk of 137191537 bytes), maximum: 9.31 GiB: While executing AggregatingTransform -
-
странно, а если set min_bytes_to_use_mmap_io=0; ?
-
Тоже самое
-
вы set делаете в той же сессии?
-
Упс нет😅
-
-
что стримится groupArray?
-
Спасибо! Сейчас протестирую
-
как понять, что можно сделать, чтобы не получать такую ошибку помимо увеличения памяти/снижения объема читаемых данных?
Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (for query) exceeded: would use 11.18 GiB (attempt to allocate chunk of 4895686 bytes), maximum: 11.18 GiB: While executing SourceFromNativeStream.
в самом запросе используется группировка на диске (т.к. не влезает в память) через явное указание max_bytes_before_external_group_by и как я понимаю, далее падает при чтении этих данных для окончательной выдачи потребителю (исходя из того, что могу прочитать в этих исходниках — https://github.com/ClickHouse/ClickHouse/blob/master/src/Processors/Transforms/AggregatingTransform.cpp#L53 )ClickHouse/AggregatingTransform.cpp at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
сколько всего памяти на машине?
какое значение выставляете в max_bytes_before_external_group_by ? -
max_memory_usage = 12e9, max_bytes_before_external_group_by=8e9
-
поставьте group_by до 6e9 или даже 4e9
-
1 если group by совпадает с order by таблицы то можно выполнить агрегацию через индекс, есть параметр optimize_aggregation_in_order.
2 можно уменьшать aggregation_memory_efficient_merge_threads (2/4) -
нет, я про select from select
-
Порекомендуйте, как построит логику обновления старых записей через REPLACE PARTITION?
-
пробовал)
запрос достаточно трудоемкий и просто падает по памяти на чтении даже в случае чтения из одного парта (!!) при условии того, что чтение происходит в рамках primary ключа (но не ключа сортировки), т.е.:
- PK - A
- Ordering Key - A, B, C, D, E
- Читаем по A (group by A) но с фильтрацией и аггрегацией (в том числе через groupArray) на колонках C, D, E (в том числе через HAVING в конце)
точно также уменьшение max_bytes_before_external_group_by не помогает, т.к. просто увеличивает время работы запроса до того, как он упадет на нехватке памяти для SourceFromNativeStream
реальным решением является семплирование через префикс для колонки A (тот же startsWith(A, '1'), например) и просто запуском для всех этих префиксов (с точки зрения прочитанных и обработанных данных мы просто оставляем некую часть). Это вариант с костылями, т.к. просто уменьшаю кол-во обрабатываемых данных в памяти. В какой-то момент кол-во данных станет больше и все снова упадет...
также, соответственно, крутил разные параметры, в том числе и кол-во потоков под merge ( aggregation_memory_efficient_merge_threads )
поэтому к изначальному вопросу — можно ли как-то подсказать КХ, чтобы он использовал на финальной обработке данных ( SourceFromNativeStream ) тоже external SSD memory (как в случае external_group_by)?
и второй вопрос — куда в данном случае вообще имеет смысл дальше копать (кроме как дебажить дев сборку у себя, т.к. в system.trace_log не столь ценная информация для данного кейса)
спасибо -
Ну а какая логика? Создаёте промежуточную mergetree таблицу с такой же структурой и ключами например с уникальным именем. Вставляете туда, валидируете селктом что вставилось то что нужно, делаете replace. Удаляете таблицу.
-
Какая версия кх? Mmap выключен?
-
temp каталог задаётся в конфиге
-
Именно так как вы описали сейчас работает, но это подходит для обновления по 'дате создания' (например обновить за 100 последних дней), а как обновлять строки у которых дата создания была например год назад, но в источнике данных эти строки обновлись - дата создания естественно не поменялась, а дата-время обновления поменялась на дату вчера например? например поменялись столбцы у строки с этим id и столбцец updated_at
-
21.2.2.8
по mmap не до конца понимаю как проверить (даже гугл не дает полезной инфы типа ubuntu enable/disable mmap)
но рекомендации по КХ отсюда выполненны — https://clickhouse.tech/docs/en/operations/tips/#ram -
не до конца понял чем это поможет, если падает на том, что не хватает оперативной памяти
-
нет, это не про это. Это про баг в 21.5 / 21.4
-
а, я неправильно понял вопрос, я думал вы temp хотите на ssd натравить.
Ответ: нет, 1/256-я часть результата group by должна помещаться в память. Там захардкожены 256 бинов. 256 это часть алгоритма и настройку сделать нельзя в принципе.
1/256 при aggregation_memory_efficient_merge_threads=1,
2/256 при aggregation_memory_efficient_merge_threads=2
сколько у вас ОЗУ и сколько уникальных элементов в group by?
про optimize_aggregation_in_order, почему он не работает, ниче не понял, не продрался сквозь ваше описание. -
ну никак.
Alter delete / insert . Что за задача такая что очень старые данные надо менять? Что вы вообще обновляете? -
Поток клиентских данных, делаю агрегаты для аналитического отчета из внешнего источника, это не логи трафика (которые менять не требуется), там есть изменения старых записях, например статусов или еще разные поля апдейтятся, факт изменений и список таких записей можно отслеживать по полю updated_at.
-
ну выносить то что меняется в ReplacingMT отдельную таблицу, либо в словарь
-
была такая идея удалять дубликаты по ключам id в ReplacingMergeTree, но в документации этого движка указано что удаление происходит не сразу и на OPTIMIZE тоже не стоит рассчитывать - что означает интервал времени в течении которого останутся дубликаты что будет некорректно для аналитики
-
да, жизнь боль и дед мороз тоже ненастоящий.
-
ну и если у вас настоящая биг-дата, то сторнировать, инсертить отрицательные числа, и оставлять навсегда
-
биг-дата бывает разная и таблицы разные, в данном случае миллионы строк это очень много, поясните чуть подробней про стонировать и инсертить отрицательные числа?
-
Ну у вас есть метрики? Что является метрикой?
-
Метрик много, типы агрегации: sum, count distinct. Старые строки все равно нужно убирать
-
Это свойственно не только бигдате, но и экономисты частенько так делают, особенно те, кто работает с родственным кликхаусу по духу движком sap hana.
Сделали проводку суммы, если там ошибка, то делается вставка строки с суммой с обратным знаком, чтобы баланс по sum давал 0 и потом вставляют строку с правильной суммой. Это позволяет делать корректировки в режиме append-only + иметь полную историю, что происходило в системе. Т.е. занесли 100 рублей, например, а надо было 110, тогда заносится -100, а потом уже 110. - 07 June 2021 (87 messages)
-
Группирую с округлением дат до месяца КХ нормально отрабатывает
select toYYYYMM(T_DATE), count(distinct ID) from test.ID_TAB
where T_DATE > toDateTime('2021-03-01')
and T_DATE < toDateTime('2021-04-01')
group by toYYYYMM(T_DATE)
order by 1
меняю функцию округления до дня
select toYYYYMMDD(T_DATE), count(distinct ID) from test.ID_TAB
where T_DATE > toDateTime('2021-03-01')
and T_DATE < toDateTime('2021-04-01')
group by toYYYYMMDD(T_DATE)
order by 1
И получаю ошибку
SQL Error [241]: ClickHouse exception, code: 241, host: null, port: 0; Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.33 GiB (attempt to allocate chunk of 24707072 bytes), maximum: 9.31 GiB: While executing AggregatingTransform (version 21.5.6.6 (official build))
Где настраивать? -
Всем привет. Кто с json в кх работал, помогите в личку плз.
-
задавайте конкретный вопрос, что делаете? что именно не получается?
-
это называется сторнирование текущим периодом =)
-
ну не без этого, да :)
-
кейс такой: парсится json по ключам и записывается в отдельные колонки, а исходный json записывается в отдельную колонку, для поиска по ключам, которые не парсятся на входе. Пример: колонка full_json, в ней лежит целиком не разобранный json: { “name”:”Андрей”, “type”:”my_kafka_topic_name”}. Как найти по полю name строки? Колонка full_json типа string. Спасибо.
-
Привет, после обновления CH с версии 21.2.4 на 21.3.9.83 CH не взлетает 2021.06.07 10:36:27.271569 [ 698 ] {} <Error> Application: DB::Exception: Aggregate function argMax requires two arguments: Cannot attach table `default`.`last_item` from metadata file /var/lib/clickhouse/store/41a/41a113aa-fef0-4de5-9a99-0f7551abfe70/last_item.sql from query ATTACH TABLE default.last_item UUID '89a0dd56-fc8f-4928-8b2b-1d861e5a23f6' (`itemId` Int32, `lastMaxItem` AggregateFunction(argMax, Tuple(Int32, DateTime))) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/last_item', '{replica}') ORDER BY itemId SETTINGS index_granularity = 8192: while loading database `default` from path /var/lib/clickhouse/metadata/default вот sql ATTACH TABLE _ UUID '89a0dd56-fc8f-4928-8b2b-1d861e5a23f6'
(
`itemId` Int32,
`lastMaxItem` AggregateFunction(argMax, Tuple(Int32, DateTime))
)
ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/last_item', '{replica}')
ORDER BY itemId
SETTINGS index_granularity = 8192 что делать? До обновления все было нормально! -
вот, две ссылки с котороыми стоит ознакомиться для вашего кейса
https://clickhouse.tech/docs/en/sql-reference/functions/json-functions/#jsonextractjson-indices-or-keys-return-type
http://eng.uber.com/loggingJSON | ClickHouse DocumentationFunctions for Working with JSON In Yandex.Metrica, JSON is transmitted by users as session parameters. There are some sp
-
не пойму как из такого вида перевести в timestamp "Wed, 01 Nov 2017 00:00:00 GMT"
-
это при вставке надо сделать или при выборке?
для SELECT parseDateTimeBestEffort
https://clickhouse.tech/docs/en/sql-reference/functions/type-conversion-functions/#parsedatetimebesteffortType Conversion | ClickHouse DocumentationType Conversion Functions Common Issues of Numeric Conversions When you convert a value from one to another data type, y
-
-
-
если докер, то можно в docker-entrypoint-initdb.d положить
https://github.com/ClickHouse/ClickHouse/issues/5176Docker: init scripts execution order · Issue #5176 · ClickHouse/ClickHouseSetting up a distributed cluster, we ran into this: 12:42:34 $ kubectl logs counters-1 ++ hostname -s + HOST=counters-1 + [[ counters-1 =~ (.*)-([0-9]+)$ ]] + NAME=counters + ORD=1 + cp /etc/clickh...
-
Разумно. Так и хотел сделать думал есть спец директория под SQL скрипты например
-
Ребят, привет!
КХ версии v21.3.11.5-lts
Кластер 2x2
В кроне крутится скрирпт, который выполняет тяжелый зарпрос, записывает результат во временную табличку, потом чистит таблицу ReplicatedMergeTree на кластере, и записывает в неё данные из временной таблицы.
Заметили проблему. Все значения результата запроса стали записываться как NULL. А если ресстартонуть кликхаусы на кластере, то таблица и вовсе пустая остается. Кто-то сталкивался с таким?
Поможет ли обновиться до v21.3.12.2-lts? -
если я создаю Replicated* таблицу в кластере, потмо ее дропаю. то запись из zookeeper не удаляется и повторно создать ее под таким же именем нельзя. есть какие то workaround?
-
делать DROP TABLE xxxx SYNC
-
для движка базы данных Atomic
надо DROP TABLE ... NO DELAY -
а то что я удалял без SYNC/NO DELAY руками в zookeeper вычищать?
-
Можно просто подождать 8 минут
-
вообще в базе лежит "date Date default now()" в запросе берется первый день месяца toStartOfMonth(date) и нужно вернуть TIMESTAMP вида 1623056060.394252
-
вы не сможете дробную часть получить в микросекундах если у вас в базе просто Date стоит тип
там только дата
toInt64(toStartOfMonth(date))
вернет timestamp без дробной части -
всем привет
У меня есть 2 distributed таблички (tab1_dist, tabl2_dist). Таблички смотрят на 3 шарда. распределены данные по юзеру
Мне нужно сделать join этих табличек и результат чтоб хранился также на кластере,а не только на сервере инициаторе запроса
я создал таблицу на каждом шарде tab_res_shard
И запрос по типу
insert into tab_res_shard
select *
from tab1_dist as t1
join tabl2_shard as t2
on t1.user = t2.user
Вставляет результат джойна все на 1 шарде,где вызывается запрос
Почему так и как решить? Нужно делать в вставку только в distributed таблицу? -
-
Добрый день! Подскажите, пожалуйста, как можно форсировать отмену всех INSERT запросов в КХ. Делал вставку в distributed таблицу, запрос упёрся в лимит maxPartsCount, после чего я пытаюсь отменить подвисшие вставки через kill query - но КХ упорно продолжает их генерировать на хостах. Перезапуск КХ не помогает тоже. Где хранятся эти фоновые процессы?
-
что то полученные даты теперь питон неверно распознает datetime.date(1970, 1, 1)
>>> date.fromtimestamp(16010)
datetime.date(1970, 1, 1)
>>> date.fromtimestamp(17501)
datetime.date(1970, 1, 1) -
все верно он распознает, это все еще 1970-01-01, но с минутами/часами
вы потеряли где-то 4-5 нулей -
там эта дата должна быть Sun, 01 Sep 2013 00:00:00 GMT
-
как эту функцию на тип Date применить toUnixTimestamp
-
-
А конкретнее?
-
-
Причина в том что при создании CHI оператор пробрасывает все лейбы (на которые смотрит Арго), но не пробрасывает ownerReferences и получается типа создан ресурс которого не должно быть
-
-
Ну напишите ишью на гитхаб
-
Да написать могу, а решение или workaround нужен уже ;(
-
Ну это нужно идти тогда к argoCD кмк
-
https://github.com/Altinity/clickhouse-operator/pull/676
Вот решение которое вроде как даже вмерджено но по факту в релизе его нет...Support label exclusions by aksdb · Pull Request #676 · Altinity/clickhouse-operatorAs mentioned in issue #487, CD systems like Flux or Argo tend to put labels on resources they manage. If those labels get propagated, weird stuff can start happening. This PR introduces a new confi...
-
У вас какая версия оператора?
Судя по всему вмержено в 14 -
У меня 14. но смотрите далее его переписали просто мастером
-
привет! Подключаюсь к таблице pgsql через ODBC
Когда пытаюсь фильтровать данные по данным из таблицы clickhouse в pg отправляется запрос без фильтров
фильтры отправляются
SELECT * FROM pg WHERE id IN (1,2,3);
фильтры НЕ отправляются, фильтруется все внутри clickhouse
SELECT * FROM pg WHERE id IN (select id from clickhouse_ids); -
Читайте ченжлог, убрали эту функцию
-
-
Почти. Там есть еще estimate, поэтому запрос может прерваться раньше, потому что ожидается что запрос будет выполняться дольше чем max. Но это выключается
-
В каталоге дистрибьютед таблицы. .bin файлы
-
Их нужно удалить?
-
Да
-
Спасибо!
-
Все так. Так и задумано. Исправлений не будет.
-
Коллеги, приветствую! Подскажите пожалуйста пуллер соединений для Clickhouse
-
А есть какие нибудь пути обхода? чтобы сходить с конкретными идентификаторами? Может какие-нибудь джойны?
-
-
да, это то что мне нужно, а как отключить? Смотрел настройки в доке, не нашел мне нужную. (https://clickhouse.tech/docs/ru/operations/settings/query-complexity/#max-execution-time)Ограничения на сложность запроса | Документация ClickHouse
Ограничения на сложность запроса Ограничения на сложность запроса - часть настроек. Используются, чтобы обеспечить более
-
Рзамер таблички можно посмотреть вот таким запросом
select sum(bytes / 1024/1024/1024) from system.parts
where database = 'XXX' and table = 'XXX'
а есть вариант как можно узнать размеры колонок в табличке? -
SELECT formatReadableSize(sum(total_bytes)), database, table FROM system.columns GROUP BY database, table
-
спасибо
-
Здравствуйте, коллеги. Подскажите, пожалуйста, куда смотреть
Есть кластер из 4 реплик, 1 шард
Таблица ReplicatedMergeTree создается на одном сервере, и не создается на 3х остальных, либо наоборот, создается на 3х, а на первом нет
Пишет Table columns structure in ZooKeeper is different from local table structure (version 21.3.4.25 -
покажите Engine=ReplicaredMergeTree(...)
что в параметрах задаете? -
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test', '{replica}')
-
таблицу создаете через CREATE TABLE ... ON CLUSTER 'cluster-name'?
SELECT * FROM system.cluster
покажите?
вы таблицу разово создаете, или где то в софте постоянно создаете и пересоздаете? -
руками создаю на каждой реплике, без ON CLUSTER
создаю разово, не софтом
причем тестовые таблицы с другой структурой создаются, а вот тут конкретно затык -
-
нет, ну или использовать COMPLEX KEY словари
-
Жаль
нашли табличку, которую очень хорошо можно перевести в словарь, а у нее ID UInt32. Со словарем гора запросов падает ( -
что мешает писать в dictGet('dasdas','sss', toUInt64(key))
-
Так все делают :)
-
или вы ее в JOIN используете?
-
Да, сейчас как джоин.
У нас просто сотни разных MergeTree табличек и мы постепенно находим места для оптимизаций. Переводим в словари то, что можно перевести и тд -
какая версия?
-
-
ну такое ощущение что как то насрали в ZK именно для той реплики на которой не получается таблицу создать
что странно
макросы вы используете
не может быть такого что где то system.macros одинаковый на разных нодах?
SELECT * FROM system.clusters
сравните на проблемной ноде и на нодах где таблица нормально создается -
timeout_before_checking_execution_speed=0
-
-
по описанию похоже что у вас 2 разных кластера зукипера
-
Хм.. спасибо, буду проверять
-
спасибо
-
оказалось, что на двух машинах перепутаны номера реплик в секции macros. Но на них как раз все создается без проблем
Я правильно понимаю, что мне теперь им придется новые номера присваивать? и все replicated таблицы пересоздавать с новыми параметрами? -
ну если есть такая возможность то да, лучше пересоздать
-
Спасибо за помощь
-
Коллеги, чет я уже запутался в документации и хочу понять как найти оптимальные настройки сервера и алгоритма вставки в Distribution таблицы, чтобы гарантировать что в них нет дублей. Есть distribution таблицы из N шардов, которые наполняются данными, настройки сервера дефолтные.
-
что подразумевается под словом дубли?
если имеется ввиду гарантия того что "не будет двух полностью одинаковых строк" на момент вставки, то никак...
даже в рамках одного сервера не говоря уже о кластере
у clickhouse (да и вообще у всех big data систем с аналитикой типа exasol и vertica ) нет понятия unique key, его просто невозможно нормально реализовать
единственное что можно гарантировать
это отсутствие дубликатов на уровне блоков (батчей)
и потом eventual consistency в рамках через ReplicatedReplacingMergeTree + SELECT ... FINAL
финальный рецепт
1) правильно выбирайте sharding key если вставляете в Distributed
2) таблица поверх которой делается Distributed - ReplicatedReplacingMergeTree
3) выборку делайте через SELECT ... FINAL - это может сильно проседать по CPU -
Да, полностью одинаковых строк. А если включить флаг insert_distributed_sync и insert_quorum? Я понимаю что полностью гарантировать отсутсвие дублей невозможно, но можно ли их минимизировать на уровне настроек и алгоритма проверки системных таблиц
-
Сейчас мы до вставки отфильтровываем данные которые есть уже в клике и не отправляем их. Проблема видимо в том что мы на момент проверки имеем ситуацию когда не все данные растеклись по Шардам и репликам. Конфиг 8 шард 2 реплики
-
Добрый вечер!
У меня возник следующий вопрос:
Есть колонки tsEvent и idEvent. Как известно, агрегирующая функция groupArray(tsEvent) не гарантирует никакого порядка. Но будут ли соответствовать друг другу элементы следующих массивов:
groupArray(tsEvent) <=> groupArray(idEvent) ? -
да будут, но если в tsEvent и idEvent нет Null. Null игнорируются агрегирующими функциями.
а еще можно делать tuple -- groupArray( (tsEvent, idEvent) ) тогда и null попадут -
к элементам туплов можно обращаться по номерам,
(groupArray( (tsEvent, idEvent) ) as x ).1,
x.2 -
Спасибо!
- 08 June 2021 (137 messages)
-
ну так вы почитайте что эти флашки делают то?
ну будете вы знать что у вас блок записался на все (или те которые покрывают insert quorum) реплики шарда при insert синхронно... что это даст? -
ну insert_quorum=2 и insert_distirbution_sync должен вам помочь...
лучше фильтровать до вставки...
НО я бы все равно сделал ReplacingMergeTree + SELECT FINAL -
Привет!
Не могу найти, возможно ли построить вторичный индекс по полю типа Array(String) ? -
В этом массиве - строки фиксированной длины, в массиве может быть от 0 до 100 эл-тов. Строки - гарантированно уникальные.
-
Доброго времени суток ! Недавно начал замечать отказ transaction c ошибкой: File not found: /var/log/clickhouse-server/clickhouse-server.log.0
-
skip index != вторичный индекс.
он будет работать с массивом как с любым другим типом данных. например минмакс на массиве скорее всего будет бесполезен, блум фильтр теоретически может помочь, но там все сильно зависит от данных и насколько они коррелируют с первичным ключом -
У меня кх несвежий, блум по массиву не хочет
-
В первичный ключ пихать смысла нет, кмк. Содержимое массива не коррелирует вообще никак и ни с чем. Списки хитрожопых строковых идшников
-
А в свежем работает блум по массиву?
-
я сам не пробовал, но в доке написано так
Supported data types: Int*, UInt*, Float*, Enum, Date, DateTime, String, FixedString, Array, LowCardinality, Nullable.
https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#available-types-of-indices
попробуйте в тесте -
но он все равно поможет только если вы будете делать сравнения типа
arrayCol=['aaa','bbb'] -
-
ну вторинчый индекс это Data Skip Index
это означает что clickhouse пытается использовать индекс для того чтобы проверить нужно или нет сканировать одну или несколько гранул из
index granularity для data skip индекса это кол-во гранул из primary key
то есть то что у вас строки гарантировано уникальные в пределах одного массива ничего не значит =) -
Строки гарантированно уникальные в пределах всей таблицы. Т.е. вот конкретно этот строковый идшник в 99% случаев стретится только один раз
-
Монотонности практически нет
-
ну, может быть денормализация + bloom filter вам поможет
-
Денормализация - вынести в 100 колонок? Или нормализация, вынести в отдельную таблицу?
-
Денормализация это
сделать вместо массива одну колонку с одним значением
а остальные продублировать...
да, данные распухнут. но можно будет искать по вашей колонке быстрее в разы, если она самая важная -
Нее, тоже не очень вариант. Искать по ней будут раз в пятилетку
-
Вынесу в отдельную таблицу, потыкаюсь
-
Спасибо
-
Всем привет. А как быстро транкейтится таблица, что бы туда сделать новый инсерт ? Что бы не было всяких гонок с данными и тд (кластер 2х2)
-
Привет! Подскажите, пожалуйста:
has(['All', 'task', NULL], task_type) — так работает
has(['All', 'task'], task_type) — а так ругается:
Types of array and 2nd argument of function \"has\" must be identical up to nullability, cardinality, numeric types, or Enum and numeric type. Passed: Array(String) and Nullable(String)
в чем прикол с этим NULL’ ом и has?
это зависит от типа task_type? у него среди значений нет NULL’ов
в других запросах has работает ок -
ок, если мы начнем использовать ReplacingMergeTree + SELECT FINAL, по документации ReplacingMergeTree справляется с дублями по OrderBy но не гарантирует этого. replicated_deduplication_window как-то влияет на это?
-
Поломали немного
has(['All', 'task'], assumeNotNull(task_type)) -
дубли по ORDER BY в ReplacingMergeTree схлопываются при background merge
а дубли по ORDER BY в SELECT
дополнительно схлопываются через FINAL
получаем на выходе выборку без дублей, но довольно сильно нагружаем CPU на SELECT -
А в каких случаях не гарантируется дедупликация?
-
спасибо!
-
а можно ли использовать FINAL в селектах из других движков? MergeTree, ReplicatedMergeTree? у меня как раз есть задача убирать дубли по ключу сортировки, но опционально - если пользователь запросил дедупликацию.
-
В MergeTree точно нельзя, будет ошибка синтаксиса
-
нет. собственно говоря
Final он для CollapsingMergeTree и ReplacingMergeTree как раз и выдуман...
мы через него как бы финально "дедуплицируем" -
не очень понял вопрос
она как бы вообще не гарантируется на уровне дубликатов строк по умолчанию...
CollapsingMergeTree \ ReplacingMergeTree + SELECT FINAL
при правильно выборанном ключе сортировки
гарантирует вам отсутствие дубликатов в результатах SELECT
первичная дедупликация делается на этапе вставки, дальнейшая на этапе merge
финальная на этапе SELECT ... -
Select final достаточно один раз запустить, если мы пишем и запрашиваем один кусок данных?
-
SELECT .. FINAL не пишет данные не диск, он их в памяти финально дедуплицирует...
в соответсвии с логикой движка...
поэтому просадка по CPU и время запроса может увеличиться...
зависит от того насколько много данных -
OPTIMIZE FINAL запишет данные на диск?
-
да, но НЕЛЬЗЯ эту операцию запускать регулярно и часто если у вас данных хотя бы сотня гигабайт
вы просто изнасилуете диск на чтение и запись...
при OPTIMIZE FINAL читается ВСЕ ДАННЫЕ
и пишутся тоже все данные ... -
-
Использую на локалхосте для дев/дебага, работает ок
-
-
-
Да, это основная цель для clickhouse-keeper
-
-
-
Заведите тикет на гитхаб. Приложите стектрейс и как можно больше инфы. Опишите как воспроизвести. Проблема известная но не удается воспроизвести -- мало инфы.
-
Пара секунд. Зависит от кол-ва партов. Если тысяча партов это значит надо удалить тысячу каталогов на диске и несколько тысяч записей в зукипере. Параллельный бегущий мерж может заблокировать надолго, но это в старых версиях.
-
Если размер партов больше макс., то мержи прекращаются. Если нет места на диске тоже.
Ну и мержи eventual. Для больших партов неразумно с точки зрения эффективности делать мержи, поэтому кх не будет их мержить. -
Тонкий намек?
-
Привет, столкнулась с такой проблемой windowFunnel.
Моя задача это отобрать id, у которых непосредственно перед событием video_start идет событие 'goto' или 'auto_play' или 'click_play'. Если что-то другое - это ошибка.
Считала по каждой айди максимальную ошибочную последовательность вот так: windowFunnel(86400000, 'strict_order')(device_timestamp, event_name NOT IN ('auto_play', 'click_play', 'goto'), event_name = 'video_start') AS max_lenght_of_errors
А потом ставила условие HAVING max_lenght_of_errors > 1
В целом это работало за исключением случая, когда у меня последовательно шли события 'auto_play', 'ad_error', 'video_start'. Тут мне считало максимальную длину цепочки равной 1, хотя должно быть 2. Не могу понять почему.
Что может быть не так? И как переписать, если это баг? -
Точка часть урла
-
телеграм игнорирует точку в конце ссылки
-
Спасибо. Раскатаю на тесте свежую версию, попробую
-
отобрать - исключить? иначе почему в первом условии NOT IN?
-
ой да, мне нужны только айди с ошибкой, где перед событием video_start идет что-то кроме 'auto_play', 'click_play', 'goto'
-
добрый день.
есть табличка и ключ на employee_id
SELECT * FROM lkdn_profiles.educations WHERE employee_id = '36577787'
выполняется 0.4 сек
20 rows in set. Elapsed: 0.370 sec. Processed 337.72 million rows, 2.70 GB (913.00 million rows/s., 7.31 GB/s.)
select * from (SELECT * FROM lkdn_profiles.educations WHERE employee_id = '36577787' ) dd where dd.deleted = 0
выполняется 10 секунд
5 rows in set. Elapsed: 9.919 sec. Processed 337.72 million rows, 89.14 GB (34.05 million rows/s., 8.99 GB/s.) -
EXPLAIN сравните
возможно там dd.deleted = 0 зачем то сначала сканируется
clickhouse-client запустите
и сделайте
SET send_logs_level='trace';
select * from (SELECT * FROM lkdn_profiles.educations WHERE employee_id = '36577787' ) dd where dd.deleted = 0;
и сравните с
SET send_logs_level='trace';
SELECT * FROM lkdn_profiles.educations WHERE employee_id = '36577787'; -
спасибо
-
видимо это
InterpreterSelectQuery: MergeTreeWhereOptimizer: condition "employee_id = '36577787'" moved to PREWHERE -
-
Заменить where на prewhere
-
спасибо
-
Ключ? не похоже что индекс работал
-
день добрый, как "правильно" готовить macros для мультикластерных нод (например один кластер 2ш*2р, другой кластер 1ш*4р) на тех же КХ нодах...
хочется чтоб разработчики в миграторах писали стандартно {shard}, но они на деле будут разными в зависимости от кластера в котором создается таблица... -
так не получится
system.macros ортогонален system.clusters
и распостраняется на сервер а не на кластер... -
Да я в курсе, я собственно в поиске бест-практис по избежанию суицидов
-
-
-
ну по другому и не получится
имена макросов уникальны в пределах сервера
они не группируются
и не будут
говорю же понятия ортогональные
макросы в ReplicatedMergeTree используются
который про distributed вообще ничего не знают... -
-
-
а чем этот не устраивает ?
-
Пока во всех версиях experimental, появилось в 21.3
-
Тем, что получается много or. Т.е я для примера описал одно или, но вообще их может быть много.
-
вроде ничего лишнего нету
-
-
Ну просто есть в CH для in удобная вещь с tuple where (id, t1) in ((1, '2020-09-10 14:06:00'), (2, '2020-09-10 14:15:00')). Может что-то такое есть, только для диапазона, а я не вкурсе, вот и задал вопрос.
-
Не очень понятна задача. Если это поиск последовательностей событий, то можно посмотреть в сторону windowFunnel и sequenceMatch
-
задача в том, что у каждого id, свой временной интервал в котором надо найти значения. Т.е не так, что у набора id один интервал, а у каждого id свой интервал, чтобы не плодить кучу запросов, я сделал один. Теперь думаю как его оптимизировать
-
спасибо
-
-
да, таких id много, тысячи
-
-
это будет плохой кросс join... не надо так
-
Добрый день! Подскажите, пожалуйста, метрики background_pool_size, background_move_pool_size, background_schedule_pool_size и background_distributed_schedule_pool_size для вставки из remote применяются из настроек удалённого сервера, или локального? Потому что я выставил их для пользователя default на серверах куда происходит вставка данных (версия 21.3.8.76), делаю запрос на вставку из remote(на том сервере версия 19.17.6.36) и КХ выругался дескать
"Code: 115. DB::Exception: Received from localhost:9000. DB::Exception:
Received from {remote_host}:9000. DB::Exception: Unknown setting background_move_pool_size. "
Задача моя максимально утилизировать сервера КХ для переливки потому как там большое количество данных нужно перелить. -
лучше того что у вас есть, не добавляя колонок, скорее всего не будет.
увеличьте max_query_size и запрашивайте спокойно... -
Спасибо
-
Доброе. а как можно поправить то что возвращает - SELECT FQDN()
┌─FQDN()─────────────────────┐
│ p.XXX.XXX │
└────────────────────────────┘
на текущее имя = домены перерезали уже после установки
nslookup
Name: p.YYY.XXX
я же так понимаю, именно эта запись в итоге прописывается в зоокипер.. и в итоге не может найти ноду -
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#interserver-http-host
вручную перебить конфигом на то имя что каждый нод может найти -
Спасибо, посмотрю
-
подскажите пожалуйста, что в нем плохого? Там же стработает hash join и правая таблица на несколько тысяч строк вся будет в памяти, ограничивая выборку по id из большой левой.
-
hash join работает только на "=" условия. во всех базах.
-
-
они (все сеттинги) передаются при запросе с remote. в 19.17 не было таких параметров. Это не починить. Можно переливать через clickhouse-client|clickhouse-client
-
рестартовать КХ
-
Это я уже понял. Спасибо.
-
/report
-
Подскажите, в операторе multiIf так же как и в if выполняются выражения во всех ветках?
-
да
-
и это никак не изменить?
-
Пока никак
-
подписывайтесь
https://github.com/ClickHouse/ClickHouse/pull/23367Implement short circuit function evaluation by Avogar · Pull Request #23367 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
-
Привет!
Пытаюсь создать кластер КХ. Подняты 3 интсанса ЗК, два КХ. Создал конфигурацию кластера из 1 шарда и 2 реплики:
<remote_servers>
<cluster_name>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>10.42.0.1</host>
<port>9000</port>
<user>core</user>
</replica>
<replica>
<host>10.42.0.4</host>
<port>9000</port>
<user>core</user>
</replica>
</shard>
</cluster_name>
</remote_servers>
создал на двух серверах базу:
CREATE DATABASE replicated_database;
Пытаюсь создать таблицу так:
CREATE TABLE replicated_database.replicated_table ON CLUSTER cluster_name (
A UInt16,
B UInt16,
C UInt16
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}')
PARTITION BY tuple()
ORDER BY (A);
Запрос бесконечно виснет и ничего не происходит. В логах пусто.
Делаю
SELECT * FROM remote('10.42.0.4', 'some_db_name', 'some_table_name')
все ок читает.
SELECT * FROM system.zookeeper WHERE path = '/clickhouse'
что-то показывает
select * from system.clusters
показывает обе ноды кластера.
Я руками создавал ReplicatedMergeTree на каждой реплике, вставлял данные в одну, но но второй реплике они не появлялись
Что я делаю не так и как можно продебажить? Спасибо
(ClickHouse server version 21.6.3) -
а ноды друг в друга могут попасть?
-
-
да, я через FROM remote(...) могу читать друг из друга
-
В логах совсем тишина, только какие-то warning'и типа:
<Warning> CollapsingSortedTransform: Incorrect data: number of rows with sign = 1 (2) differs with number of rows with sign = -1 (0) by more than one
но это к делу не относится -
-
Спасибо
-
>Подняты 3 интсанса ЗК
ZK в одном ансамбле?
select * from system.replication_queue
{shard} одинаковый ? -
вообще эквивалентно, но есть мелкие отличия, например при использовании поля в USING возвращается одна колонка на ключ а не две, обычно нельзя использовать это поле с алиасом таблицы, хотя в КХ вот можно
ну и при тройных join-ах веселье есть...
в общем синтаксис с ON - более "explicit".
select * from system.contributors a join system.contributors b on (a.name=b.name) order by name limit 2;
select * from system.contributors a join system.contributors b using (name) order by name limit 2; -
пока фикс не завезли в 20.8 релиз, никто не может подсказать, есть ли какие-нибудь настройки которые позволяют ну хотя бы реже сталкиваться с этой проблемой?
https://github.com/ClickHouse/ClickHouse/issues/23296Part X intersects next part Y. It is a bug. · Issue #23296 · ClickHouse/ClickHouseDescribe the bug At some point of time next error appears at log. (After that this error spams the log endlessly..) Apr 17 17:45:30 click-inst-1.com clickhouse-server[43]: 2021.04.17 17:45:30.28795...
-
а что до версии 20.x.x.x такой проблемы не было? Это как бы баг который был, есть и будет
-
может в конкретно вашем случае начало проявляться после 20.5 (все реплики лидеры) ?
-
Да, вероятно. Это можно отключать?
-
в 20.3 не было
-
можно половине реплик запретить типа can_became_leader = false, но это опасно, если вторая реплика сдохнет навсегда
-
-
лучше в гитхаб тогда, может кто-то лучше знает или догадается где проблема
-
скорее всего это до сих пор не починено
-
-
ну вроде все тикеты поназакрыты:
https://github.com/ClickHouse/ClickHouse/issues/23296 -
причем там многоуровневое расхождение Т.Т
сначала warnings потом ошибки...
Part 20210414-421_0_228_4 is covered by 20210414-421_0_228_4_1436 but should be merged into 20210414-421_0_1279_5. This shouldn't happen often. -
-
my mistake, я не заметил что не верно зк ноды сконфигурировал. Раздал разные ip, но id ноды у всех "1" была.
-
>а зачем вообще мульти-лидер режим был введен
просто потому что возможен, почему нет.
у вас какой-то корнер кейс неучтенный, так-то вроде все это работает без проблем даже в больших инсталляциях, насколько я понимаю даже ЯМетрика уже на 21.3 или дальше уже -
так и без меня 3 тикета в ГХ есть, с фиксом.
мы ж не знаем как там can_become_leader в метриках )
а у нас это проявилось вообще на мини инсталляции где всего 2 реплики и вставка всегда в одну... прям "внезапно" -
#вакансия #удаленка #dba #clickhouse
ищем крутого dba. в идеале на clickhouse или с желанием изучить. зарплата от 180 обсуждаемая. Любой город, можно в офисе(мск сити), если хочется. тк рф, дмс, все дела. ищем активных и целеустремленных :-) по вопросам в лс -
#вакансия #удаленка #разработчик
ищем разработчиков clickhouse с опытом. от junior до senior. зарплата от 120 обсуждаемая. Любой город, можно в офисе(мск сити), если хочется. тк рф, дмс, все дела. ищем активных и целеустремленных :-) по вопросам в лс -
Не кх вакансии тут нельзя.
-
это кх
-
-
спс)
-
А реплики от Зукипера далеко?
-
Зк не падал, от зк до реплик пара мс
-
-
там еще мутации были?
реплики назначили разные мержи на одни и те же парты, или нет? -
- 09 June 2021 (394 messages)
-
-
что вычтет? вычитает или 5-1 (вычтет)
-
-
-
из вашего примера все равно ничего не видно. То ли select limit 1 вернул 10 строк, то ли что.
limit срабатывает после всех условий.
КХ вообще может прочитать намного больше чем надо, и много тредов могут очень долго читать и не знать что уже все, больше не надо. -
-
пока дочение треды читают и стопаются, проходит время...
сейчас цепочка processors сделана не через pull модель а через push (так быстрее в большинстве случаев) -
-
Добрый день. Безболезненно наверное нет, нужно менять движок таблиц на репликейтед
-
- поднять zookeeper или clickhouse-keeper (он пока экспериментальный)
https://www.howtoforge.com/tutorial/how-to-install-apache-zookeeper-on-ubuntu-2004/
- прописать его на обоих нодах в секции конфига <yandex><zookeeper> /etc/clickhouse/config.d/zookeeper.xml
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#server-settings_zookeeper
- прописать <remote_servers> на обоих нодах тоже через config.d
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#server-settings-remote-servers
см. пример кластера тут
https://clickhouse.tech/docs/en/engines/table-engines/special/distributed/
это нужно для того когда появится ВТОРОЙ шард
- прописать <yandex><macros> правильно на обоих нодах то же через config.d
https://clickhouse.tech/docs/en/operations/server-configuration-parameters/settings/#macros
см. как макросы прописываются в доке
https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/
- текущие таблицы для одного сервере должны быть с Engine=MergeTree и
надо будет конвертировать их в ReplicatedMergeTree
на обоих репликах новые таблицы ReplicatedMergeTree надо будет создать РУКАМИ...
не забыть правильно макросы задать в параметрах ReplicatedMergeTree
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-converting-mergetree-to-replicated
- подождать пока данные реплицируются
- создать какой то load balancer например chproxy или просто nginx перед этими двумя нодами upstream + proxy_pass
- когда потребуется поднять второй шард
прочитать еще раз что такое Engine=distributed
- установить две новые ноды, прописать на двух новых нодах правильно macros
- создать пустые ReplicatedMergeTree таблицы
-добавить новый шард из двух реплик на всех 4 нодах в remote_servers
- не забыть про zookeeperHow to Install Apache ZooKeeper on Ubuntu 20.04Apache ZooKeeper is a high-performance service used to build distributed applications. It is used by a cluster to maintain shared data with robust syn...
-
в общем это не как MySQL ;) xtrabackup —master-info; который сделает CHANGE MASTER TO ... START MYSQL SLAVE;
и алга =) -
хм, у меня больше половины таблиц в collapsingmergetree, прям стало любопытно, как оно переживет
-
-
разницы между CollapsingMergeTree и обычным MergeTree нет, они как были так и осались
это ЛОКАЛЬНЫЕ Таблицы в рамках одного сервера
они не реплицируемы
чтобы были реплицируемые
надо чтобы серверов было УЖЕ ДВА
и чтобы был ZK
и надо конвертировать в ReplicatedCollapsingMergeTree
вы видимо вообще не понимаете как репликация в clickhouse Работает ... -
поэтому и спрашиваю) у меня просто бэк в postgres и oracle) пока читаю официальную документацию, попробую на тесте поэксперементировать
-
-
ок. тогда попробуйте прочитать несколько раз https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/Data Replication | ClickHouse Documentation
Data Replication Replication is only supported for tables in the MergeTree family: ReplicatedMergeTree ReplicatedSumming
-
Подскажите, в связи с этим: "ClickHouse release 21.6, 2021-06-05: Do not upgrade if you have partition key with UUID", нужно что-то делать? Т.е. нужно ждать следующий релиз, или что тут имеется ввиду?
-
эта опция появилась не так давно, какая у вас версия clickhouse?
-
я не знаю
-
да, лучше подождать
-
SELECT Version():
-
19.16.2.2
-
очень старая версия
очень много фич с доки текущей работать не будут
WITH (SELECT ...) точно -
((((((((((((((((((((((((((((((((((((((понятно, спасибо
-
У меня тоже не работает читаю из кеша
-
Здравствуйте!
подскажите, нужно выполнить сверхбольшую аггрегацию, получаю DB::Exception: Memory limit (for query) exceeded: would use 18.68 GiB (attempt to allocate chunk of 134311947 bytes), maximum: 18.63 GiB: While executing AggregatingTransform.
Как можно это выполнить ? -
Restrictions on Query Complexity | ClickHouse Documentation
Restrictions on Query Complexity Restrictions on query complexity are part of the settings. They are used to provide saf
-
DB::Exception: Received from host:9440. DB::Exception: Memory limit (for query) exceeded: would use 18.63 GiB (attempt to allocate chunk of 4194776 bytes), maximum: 18.63 GiB: While executing SourceFromNativeStream.
теперь такое -
там надо поставить в два раза больше чем разрешено памяти
в одной сессии настройку сделал? -
set max_bytes_before_external_group_by = 10000000000000000000
-
max_bytes_before_external_group_by=max_memory_usage
max_memory_usage=2*max_memory_usage -
Коллеги, добрый день! Я хочу передавать в quantile число, которое вычисляется в запросе. Я его вычисляю в запросе, но при попытке его установить выходит ошибка Parameters to aggregate functions must be literals.:
Как то можно это сделать? -
ааа, я понял )
спасибо) -
так не получится
квантиль константой должен быть относительно всей выборки
а не индивидуальный
вытащите отдельно SCT_index в пером запросе вместо квантиля
а дальше сделайте серию отдельных запросов для каждого SCT_index -
Спасибо! А не подскажите, если общий размер базы в КХ порядка 5 Тб и я хочу сделать одну реплику, то, поднимая дополнительные zookeeper на других серверах как понять сколько под него оперативы оптимально будет?
-
"поднимая дополнительные zookeeper" не очень понятно что имеете ввиду
данные в zookeeper не шардятся все инстансы зукипер имеют одинаковые данные и синхронизируют изменения между собой
объем оперативы ZK зависит от интенсивности INSERT вставок в clickhouse...
ZK используется только для передачи метаданных новых партов и регистрации реплик
ну и для Distributed DDL ( запросы которые модицируют структуру и выполнятся на ON CLUSTER )
Сами данные по http забираются репликой самостоятельно с той реплики которая зарегистрировала новый кусок данных (data part, см. system.parts в документации)
5 Терабайт, это прям вам надо отдельно скопировать и потом уже реплику аттачить... -
>5 Терабайт, это прям вам надо отдельно скопировать и потом уже реплику аттачить...
вот это меня всегда интересовало, если есть клонированные данные на новой ноде, можно ли приаттачить реплику. сработает ли подобный процесс?
- создать replicated MT на новой ноде
- system stop replica
- положить файлы в детачед и аттачнуть
- start repiica? -
Понял, спасибо, а про доп. ZK имел в виду,что везде же советуют минимум 3 ZK ноды использовать.
-
по идее да, но фиг знает как на практике я лично 5Tb Не пробовал =) придет denny и скажет что я ерунду говорю
-
ок, это должны быть 3 одинаковые ноды связанные в ZK кластер
и еще они должны быть отдельно от clickhouse чтобы не бороться с ним за диск и CPU
потому что ZK при интенсивной вставке (в смысле кол-во запросов INSERT а не строк) вполне себе способен выжирать CPU и диск -
А в чем проблема дать кх просто по сетке передать эти 5тб, можно чуть придушить только кол-во партов скачиваемых одновременно
-
да, ждем. у меня вопрос скорее по поводу того что когда диски на массиве, там можно клонировать и благодаря дедупу, это будет в делом секунд.
-
^
бывает 5, бывает 100, бывает много таблиц с партициями... -
Ну мы же конкретную задачу сейчас решаем про 5 тб :)
-
ну тогда да, просто аттачим реплику и ждем...
-
ну я "в догонку" спросил
у нас например холодные данные на SHared SAN/NFS, и там копирование на уровне ФС моментальное изза дедупа на сторадже, а создание и запись файла нет
поэтому хочется понять как можно склонировать базу/таблицы быстро и без болей -
Хм, можно попробовать через ./detached
https://clickhouse.tech/docs/en/sql-reference/statements/alter/partition/#alter_attach-partition
Если на всех репликах туда подложить парт, то кх на всех репликах оттуда его заатачит -
Либо ждать zero copy replication over NFS
-
Т.е. так? https://t.me/clickhouse_ru/221592【D】【J】 in ClickHouse не тормозит
>5 Терабайт, это прям вам надо отдельно скопировать и потом уже реплику аттачить... вот это меня всегда интересовало, если есть клонированные данные на новой ноде, можно ли приаттачить реплику. сработает ли подобный процесс? - создать replicated MT на новой ноде - system stop replica - положить файлы в детачед и аттачнуть - start repiica?
-
Мне кажется так :
ALTER TABLE xxxx DETACH PARTITION 'xxxxxx'
подкладываем парты в новой реплике
ALTER TABLE xxxx ATTACH PARTITION 'xxxxxx' -
Но это на относительно новых версиях только
-
-
-
-
Подскажите, пожалуйста, правильный алгоритм действий. Нужно в КХ иметь словарь, который должен обновляться полностью (около 1млн записей) из запроса в том же КХ. Словарь нужен на всех нодах кластера. Как это правильнее организовать?
-
в кх нет boolean можете использовать 0 1 вместо
-
сделайте view и в качестве источника укажите ее
ну и сделайте словарь on cluster -
создайте таблицу отреплицированную на все сервера и направьте ваш словарь на эту таблицу
-
либо через view как подсказали
-
А как словарь направить на таблицу? Я из доки что-то не понял...
-
источник словаря CLICKHOUSE
-
там должно быть
-
понял, спасибо!
-
Источники внешних словарей | Документация ClickHouse
Источники внешних словарей Внешний словарь можно подключить из множества источников. Общий вид XML-конфигурации: <yandex
-
Ага, спасибо, увидел.
-
И в качестве table я указываю имя реплицироанной таблицы на ноде?
-
Да
-
да хоть какой, можно и не реплицированной, можно и view, только будьте внимательны с тем, что все поля в словаре должны совпадать с полями таблицы
-
С view не очень понял. Вы имеете ввиду материализованную?
-
нет
вы же хотели изначально к запросу обращаться словарем.
просто так указать в качестве источника запрос нельзя
но можно создать view обычную и в качестве источника использовать ее. -
Обычная view которая через remote table function будет смотреть на таблицу на другом сервере
-
-
У меня запрос, который создаёт набор данных для словара с агрегацией. Я как раз и хотел сохранить эту промежуточную агрегацию для ускорения.
-
А если я это сделаю через view, он же будет каждый раз выполняться?
-
Да
-
да, ну и выставите lifetime такой чтобы он обновлялся при каждом обращении
-
Да мне как раз не нужно, чтоб при каждом обращении. Я его буду раз в час обновлять.
-
выставьте lifetime 3600(там в сек если я не путаю) и каждый час ваш словарь будет обращаться к view и делов
-
А. Я похоже Вас не понял. Т.е. такой словарь в себе хранит данные?
-
в зависимости от способа размещения в памяти, но классически это в оперативной памяти
-
Большинство словарей хранят данные в себе, за исключением direct/cache
-
Вот теперь всё встало на свои места. Спасибо.
-
Добрый день. Коллеги, плагину для графаны обязательно нужен столбец timeseries или DateTime в таблице? У меня есть таблица с датой и суточными значениями, как быть? Для timeseries данных, с таблицей всë отлично
-
Сделал словарь с source clickhouse через конфиг. При его загрузке командой system reload dictionary получил ошибку Code: 396, e.displayText() = DB::Exception: Limit for result exceeded, max rows: 10.00 thousand, current rows: 65.50 thousand (version 21.4.7.3 (official build))
как мне отключить это ограничение для загрузки словаря? -
Что то то очень странное. покажите весь конфиг для словаря (атрибуты можно вырезать)
-
<source>
<clickhouse>
<host>localhost</host>
<port>9000</port>
<user>default</user>
<password>****</password>
<db>db_shema</db>
<table>db_table</table>
</clickhouse>
</source>
<layout>
<hashed />
</layout> -
А,
SELECT * FROM system.settings WHERE changed; -
Да, там есть max_result_rows,10000
-
ну убирайте тогда из default юзера
-
Вообще ограничение убрать?
-
Для default юзера да, а так можете переставить для более конкретного
-
Сервер надо будет рестартовать?
-
Думаю придется, тк внутренний юзер при загрузке подтягивает такую настройку
-
Добрый день. Получая ошибку DB::Exception при вставке в Distributed-таблицу, можно ли гарантировать, что данные не записались совсем, или они могли записаться частично? Примеры ошибок: Table is in readonly mode, ZooKeeper session has been expired, Cannot allocate block number in ZooKeeper: Coordination::Exception: Connection loss, Unknown status, client must retry. Reason: Connection loss
-
Всем доброго дня подскажите, почему неправильно вычисляются timezone'ы?
вот запрос
SELECT now(), timeZone(), timezoneOf(now()), toDateTime(now(), 'Europe/London'), toDateTime(now(), 'Europe/Moscow');
вот результаты
2021-06-09 09:40:32,Europe/Moscow,Europe/Moscow,2021-06-09 09:40:32,2021-06-09 09:40:32 -
-
ошибка в datagrip
-
А toTimeZone(now(), 'Europe/London') что говорит?
Всё-таки toDateTime нужен не для преобразования таймзоны, а для преобразования типа DateTime -
так и есть, спасибо большое))
-
Если очень нужно посмотреть время в нужной timezone в datagrip, это можно сделать при помощи toString(now(), 'Europe/London')
-
Wrong timezone at DataGrip + clickhouse : DBE-8243
Screenshot with problem at attachment. (shows DateTime at UTC timezone, but my timezone (and timezone at server) is Europe/Samara) From client library from script connection: D, [2019-04-29T03:33:02.797556 #3441] DEBUG -- : SQL (10.4ms) SELECT timezone(), now(); 1 row in set. Elapsed: 0.055ms. Processed: 1 rows, 1 Byte (18.34 thousand rows/s, 17.91 KB/s) #ᐸClickhouse::Connection::Query::ResultSet:0x00007fc8e001bd90 @names=["timezone()", "now()"], @rows=[["Europe/Samara", "2019-04-29 03:33:02"]], @types=["String", "DateTime"]ᐳ DB-191.6707.12, JRE 1.8.0_202-release-1483-b44x64 JetBrains s.r.o, OS Mac OS X(x86_64) v10.14.4, screens 1440x900; Retina…
-
-
посмотреть в эррор логах
-
Спасибо, буду копать там
-
ZK возможно троттлит запросы, попробуйте увеличить настройку у ЗК globalOutstandingLimit до 10000 н-р.
-
-
Подскажите, для атрибута словаря
<attribute>
<name>startdate</name>
<type>Nullable(Date)</type>
<null_value></null_value>
</attribute>
как правильно описать null_value, чтобы возвращался NULL при отсутствии записи?
Пробовал <null_value>null</null_value> и <null_value>NULL</null_value> - ошибка при загрузке словаря. -
словари not null
хотя новые версии вроде бы nullable -
мм.... не понял.
-
в старых версиях точно нельзя было nullable значения складывать
-
Само-то значение может быть null. Проблема с отсутствующим значением.
-
версия 21.4
-
dictGetOrNull('dict_name', attr_name, id_expr)
-
Это да. Но вот чтоб просто dictGet
-
-
а посмотрите внимательнее в ветке "NoSQL, Big Data" ;)
-
в этих ветках иногда чтото мелькает, но мне кажется Clickhouse заслуживает отдельную ветку
-
Подскажите какую настроечку сделать, чтобы парты не так быстро пытались скачиваться на реплику. У нас много частых и больших вставок и постоянно в логах реплики(куда не пишем) вот такие варнинги:
Checking part 069cd908184690fd470ee7527cfc59aa_15221_15
600_85
2021.06.09 11:07:42.016148 [ 56248 ] {} <Warning> db.tb (ReplicatedMergeTreePartCheckThread): Checking if anyone has a part 069cd908184690fd470ee7527
cfc59aa_15221_15600_85 or covering part.
2021.06.09 11:07:42.020553 [ 56248 ] {} <Warning> db.tb (ReplicatedMergeTreePartCheckThread): Found parts with the same min block and with the same m
ax block as the missing part 069cd908184690fd470ee7527cfc59aa_15221_15600_85. Hoping that it will eventually appear as a result of a merge -
видимо не такие они у вас и большие ... но очень частые
если мерж успевает сработать до того как реплика новый парт фетчить начинает -
есть такое(
-
есть какая нибудь delay настройка?
-
уменьшить частоту вставок и увеличить размер никак? ;)
-
к сожалению, такая проблема на одной таблице, такая "логика"(
-
C zk всё понятно, на нём проблемы понятны. Интересует именно поведение КХ при подобных ошибках, не обязательно даже связанных с zk. Можно ли гарантировать, что данные не записались совсем, или они могли записаться частично?
-
можно гарантировать что они ТОЧНО не записались
запрос можно сделать на другом сервере в кластере, на котором таблица не в read-only
основная гарантия
что если сервер вернул ОК
значит данные записались
если нет, то не записались вообще
есть конечно кейсы которые связаны с тем что блок в миллион записей пишется отдельно...
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-max_insert_block_size
у вас за один INSERT больше миллиона записей вставляется или нет?
SELECT * FROM system.settings WHERE name='max_insert_block_size';Settings | ClickHouse DocumentationSettings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
За один insert меньше миллиона, несколько сот тысяч. Проблема в том, что получив ошибку Cannot allocate block number in ZooKeeper: Coordination::Exception: Connection loss, часть данных всё таки вставилась. Поэтому и возник вопрос как правильно обрабатывать ошибки, никогда нельзя быть уверенным, что данные не вставились, или на какие-то ошибки точно не вставились, а на какие-то не понятно.
-
Привет. Подскажите, пожалуйста, в чём ошибка. Пытаюсь сделать attach table, получаю
Code: 27. DB::Exception: Received from localhost:9000. DB::Exception: Cannot parse input: expected metadata format version: 1\n at end of stream.. -
Для указанной таблицы format_version.txt прописан 1.
-
вы ее в клиенте получили? или в логах нашли?
-
Ошибку клиент получил, обращался по HTTP
-
Сделал всё по этим гайдам, но на обоих серверах КХ не запускается и пишет следующую ошибку в лог:
<Error> Application: Not found: remote_servers.logger.shard.replica.host -
Всем привет! Кто-нибудь подскажет, как можно автоматизировать масштабирование clickhouse?
-
Всем привет. А может быть можно как-то посмотреть текущую скорость вставки в кх в таблицу?
Суть в том, что у меня ща работает комманда которая через clickhouse-client вставляет данные, но оно чёт медленно работает и я хочу понять где тормозит.
Пытался найти где-нибудь в system табличках, но чёт не нашёл:(
Вставляю вот по такой схеме https://kb.altinity.com/altinity-kb-schema-design/altinity-kb-jsonasstring-and-mat.-view-as-json-parser
zcat file.out.gz | tail -n +2 | clickhouse-client --query "INSERT INTO entrypoint FORMAT JSONAsString" -
remote_servers покажите из /var/lib/clickhouse/preprocessed_configs/config.xml?
-
По топу машина почти не нагружена.
load average: 1.88, 1.93, 2.01 -
Как можно автоматически настроить конфиги, если добавил ещё 2 сервера к примеру?
-
system.processes
-
на мастере:
<remote_servers>
<logger>
<shard>
<replica>
<internal_replication>true</internal_replication>
<port>9000</port>
<user>мой юзер</user>
<password>мой пароль</password>
</replica>
<replica>
<host>айпи слейв сервера тут</host>
<port>9440</port>
<user>мой юзер</user>
<password>мой пароль</password>
<secure>1</secure>
</replica>
</shard>
</logger>
на слейве:
<remote_servers>
<logger>
<shard>
<replica>
<internal_replication>true</internal_replication>
<port>9000</port>
<user>мой юзер</user>
<password>мой пароль</password>
</replica>
<replica>
<host>айпи мастер сервера тут</host>
<port>9440</port>
<user>мой юзер</user>
<password>мой пароль</password>
<secure>1</secure>
</replica>
</shard>
</logger> -
-
Сам думаю над этим вопросом. Похоже, никаких изящных механизмов для этого нет
-
везде host нужен
внутри <replica> -
kubernetes + clickhouse-operator + aws eks + autoscaling
-
ansible?
-
ну там чисто written_rows, written_bytes есть из интересного.
Я думал мб где-нить есть прям счётчик rows/sec -
У меня задача нетривиальная, нужно при росте нагрузки увеличивать число нод, а при снижении уменьшать)
-
он был бы, если бы вы запустили clickhouse-client с
--progress print progress even in non-interactive mode -
В новых версиях
-
оооо, спасибо! На след файле так запущу:)
-
Ждать production ready zero copy replication over s3
-
-
для s3 уже есть, но сыровато
-
-
шел 13ый час моих тщетных попыток и наконец заработало. Спасибо!)
-
S3 zero copy replication by ianton-ru · Pull Request #16240 · 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...
-
-
#вакансия #удаленка #dba #clickhouse
ищем крутого dba. clickhouse или с желанием изучить. зарплата от 180 обсуждаемая. Любой город, можно в офисе(мск сити), если хочется. тк рф, дмс, все дела. ищем активных и целеустремленных :-) по вопросам в лс -
Это обширная тема, если планируется более-менее серьезно использовать КХ.
Если нет бюджета на разработчиков и/или девопсов-sre, то лучше просто пойти в клауд.
Масштабирование ведь предполагает не только расширение кластера (это проще), но и сужение (это сложнее). Также нужно будет делать мониторинг и обслуживание, что предполагает операционную работу. -
Я мидл разработкик, начинающий девопс, множество задач кинули на меня)
-
Я представляю что нужно для всего этого, просто периодически ищу новую информацию, вдруг кто-то работал с этим, и знает наиболее подходящее решение
-
Тогда выглядит, будто надо просто решить какую-то конкретную проблему, а не строить мини облако. Расскажите про свой стек, и что конкретно нужно сделать
-
Если есть множество задач, то о скалировании кластера вниз (мы тут говорим про кол-во шардов, с репликам попроще) лучше тогда вообще не думать :)
Очень грустно и муторно. -
Всем привет! Есть ли возможность как-то узнать получили данные со всех шардов или нет в случае выставленного skip_unavailable_shards=1?
-
Привет. После обновления с 19.14 на 21.3 на Distributed таблицах limit by выдает ошибку на колонках-константах, если их не добавлять в limit by.
Так работает:
SELECT 1 as test, id
FROM tableMergeTree
LIMIT 1 BY id;Так работает:
SELECT 1 as test, id
FROM tableDistributed
LIMIT 1 BY id, test;Так ошибка:
SELECT 1 as test, id
FROM tableDistributed
LIMIT 1 BY id;
Code: 8, e.displayText() = DB::Exception: Cannot find column `1` in source stream (version 21.3.10.1 (official build))Может есть какая-то настройка или костыль, чтобы не писать константные колонки в limit by? Настройка compile_expressions не влияет. -
что-то оно не выводит ничего. Параметр такой у комманды есть, но в std out ничего не выводит
-
А в мониторинге клика можно как-то определить, сколько ресурсов тратит определенный пользователь?
-
root@LAPTOP-319G0GMQ:/var/lib/clickhouse/data/default/t_json_2# clickhouse-client --progress --query "SELECT sum(number) FROM numbers(10000000000)"
→ Progress: 2.38 billion rows, 19.05 GB (947.24 million rows/s., 7.58 GB/s.) ████████████████████████████████████▏ -
Какая версия?
-
-
-
Сомнительно
-
clickhouse-client --progress --query "INSERT INTO TABLE FUNCTION null('key UInt32') SELECT number FROM numbers(10000000000)"
↗️ Progress: 1.44 billion rows, 11.54 GB (256.10 million rows/s., 2.05 GB/s.) █████████████████████▊ -
Вы вообще можете еще через table function file вставлять
-
-
Да, конечно
-
-
-
Ну можно настроить
│ input_format_allow_errors_num │ 0 │ 0 │ Maximum absolute amount of errors while reading text formats (like CSV, TSV). In case of error, if at least absolute or relative amount of errors is lower than correspondi -
Спасибо! Попробую
-
написано ток про CSV и TSV но вроде на JSONEachRow тоже работает
-
Выдаёт: Input format doesn't allow to skip errors
:((
У меня там JSONAsString, а пропускать ошибки можно только с CSV, TabSeparated, TSKV, JSONEachRow, Template, CustomSeparated and Protobuf, судя по доке. Поздно увидел -
Хм, а jsonEachRow не подходит вам?
-
-
Или можно вообще попробовать импортировать просто как строки
-
Понятно
-
-
тяжко
можно попробовать через https://github.com/chmln/sd
попробовать в JSONEachRow формат конвертироватьGitHub - chmln/sd: Intuitive find & replace CLI (sed alternative)Intuitive find & replace CLI (sed alternative). Contribute to chmln/sd development by creating an account on GitHub.
-
да я уже легче по изначальной схеме за 3 часа импортну всё)
Я изначально пытался всё через jq трансформировать ещё, но оно вообще еле тащилось -
Добрый вечер!
У меня вопрос по массивам. Есть ли какое-нибудь решение для ситуации, когда нужно хранить разные типы данных в одном массиве? По документации это не разрешено, но может есть обходной путь? -
приведите всё в String 🤷♂️
-
-
была такая идея, но будет сложно писать WHERE conditions in запросе с цифровыми полями
-
некоторые поля динамические, контроль по из созданию у юзера
-
эммм, не вижу проблемы. В КХ есть на такое nested типы (на ваш запрос)
https://clickhouse.tech/docs/en/sql-reference/data-types/nested-data-structures/nested/Nested(Name1 Type1, Name2 Type2, ...) | ClickHouse DocumentationNested(name1 Type1, Name2 Type2, …) A nested data structure is like a table inside a cell. The parameters of a nested da
-
спасибо! буду разбираться
-
-
Еще есть map типы
-
Ну или можно делать EAV и в итоге писать очень сложные запросы...
-
если фильтр замедляет запрос
например фильтр по полю у которого высокая кардинальность
то да -
-
Кто заливал через clickhouse-driver pd.DataFrame
client.insert_dataframe("INSERT INTO dtr.test_table VALUES", chunk)
Выдает ошибку
AttributeError: 'float' object has no attribute 'encode'
Хотя нету float значений в датафрейме
Или как по другому можно залить датафрейм? -
Всем привет, а можно ли как-то дебажить вьюхи из kafka table? Бывает застревает почему-то, данные в очереди, но mv не запускается
-
Либо, возможно, отдает ошибку
-
grant только для пользователей созданных через sql
https://clickhouse.tech/docs/ru/operations/access-rights/#access-control -
Для пользователя созданного в user.xml нельзя ограничить доступ по таблично ?
-
не задавался таким вопросом, но по логике нельзя, так как КХ не умеет редактировать users.xml, а GRANTы персистентные должны быть
-
Просто в user.xml можно указать allow_database и дать доступ к определенной базе, вот думал что есть такое же и для таблиц. Спасибо
-
Емнип нельзя
-
Можно создать такую же кафку рядом а потом делать туда селекты
-
Спасибо
-
ну селекты работают, что самое интересное, и даже работает insert into table select from queue,
но вот mv почему зависает иногда, не переливает данные -
Что в логах
-
так вот я и спрашиваю как дебажить, логи пустые, это локальный docker compose)
-
А если грепнуть по названии кафка таблицы
-
вы уровень логирования меняли?
-
оба лога, обычный и эррор
-
Неа, не менял, сча гляну, спасибо
-
-
а, он в докере пишет в файл, работал лог, в следующий раз когда завистет, гляну в лог, благодарю
-
-
Установка | Документация ClickHouse
Установка Системные требования ClickHouse может работать на любой операционной системе Linux, FreeBSD или Mac OS X с арх
-
Сделал
curl -O 'https://builds.clickhouse.tech/master/macos/clickhouse' && chmod a+x ./clickhouse
sudo ./clickhouse install
И ничего не работает -
У вас Mac OS?
-
brew tap arduanov/clickhouse тоже не работает
Invalid formula: /usr/local/Homebrew/Library/Taps/arduanov/homebrew-clickhouse/clickhouse.rb
clickhouse: undefined method `devel' for #<Class:0x00007f9e6eae0588>
Error: Cannot tap arduanov/clickhouse: invalid syntax in tap! -
у вас какой мак, на m1 ?
-
нет, Intel i5
-
Тогда работать должно.
Что вы имеете в виду под ничего не работает& -
curl -O 'https://builds.clickhouse.tech/master/macos/clickhouse' && chmod a+x ./clickhouse
sudo ./clickhouse install
sudo clickhouse start
Этот набор команд неправильный для запуска clickhouse? Получается документация врет? -
Политрук несомненно лжет. (по крайней мере так сообщается в листовках)
Но если вы не сообщите что вы видите и какую реакцию получаете на ваши действия, то мы не сможем вам помочь. -
Так я же скинул скриншот))))
Или этого недостаточно?) -
А вижу, пропустил
-
-
Ну так там же ругается на -s /bin/bash
nano /etc/init.d/clickhouse-server
Попробуйте подправить его -
можно,
Единственное условие что бы новая полиси включала диски из старой -
благодарю.
-
Не понимаю) Он пустой
-
Документация хороший программных продуктов должна быть self-explanatory, где все работает и не нужно ничего подправлять.
Множество продуктов больших компаний таких как Google или Microsoft или не работают или работают отвратительно. Я надеялся, что продукты Яндекса будут исключением...
За что Clickhouse так хвалят, если он не работает? -
Я уверен. что яндекс с радостью вернет вам деньги которые вы заплатили за кликхаус.
А так это open source, документация соответственно тоже, мы будем рады если вы поможете улучшить ее. -
Я понимаю
-
вот этот вариант точно работает - https://clickhouse.tech/docs/ru/development/build-osx/
-
Обязательно нужно иметь Xcode?
-
ClickHouse действительно хорошо отлажен и работает в двух окружениях: у Яндекса в продакшене (Linux) и может ещё у CloudFlare, и то это неточно, и у них скорее всего тоже Linux. Нативная работа ClickHouse на macOS разработчикам явно не интересна, учитывая существование докера. Если Вы хотите нативный кликхаус под мак, то готовьтесь его сами собирать, или страдать, или и то и другое :).
-
Достаточно command line tools и 16 Гб оперативы и 30+ Гб места на диске
-
Обидно(
+ 10 гб если найдется свободного места – уже хорошо -
попробуйте из под юзера clickhouse
/usr/bin/clickhouse-server --config-file=/etc/clickhouse-server/config.xml -
ну тогда вам в докер, или позовите девопсов)
-
-bash: cd: /usr/bin/clickhouse-server: Not a directory
-
ну а толку что оно собирается, но при этом вылетает в работе?
-
clickhouse-server
Это файл в /usr/bin/ -
Хз, у меня вроде работало и не вылетало, но я в продакшене на маке не юзал, и собирал с отключенным всем, что только можно
-
Так вылетает не сам кликхаус а su -s ругается на параметр, отставить панику
-
Собирал для m1 вот так: https://t.me/clickhouse_ru/193016Yuran in ClickHouse не тормозит
Кстати, если кому-то вдруг интересно, то clickhouse под Apple Silicon собирается, но с таким патчем (одна из правок совершенно точно что-то сломает, но тут я особо ничего не могу поделать :)). https://pastebin.com/raw/CyWRjtsf
-
я пробовал ради интереса когда наткнулся на проблему в freebsd - не очень стабильно было. но с другой стороны вроде макос для продакшена наверное мало кто импользует
-
Речь про мак же была?
-
да
-
Вроде мастер фиксили для m1
-
мак как я понимаю такая же не целевая ось
-
вот и результат
-
#вакансия #удаленка #dba #clickhouse
ищем крутого dba. в идеале на clickhouse или с желанием изучить. зарплата от 180 обсуждаемая. Любой город, можно в офисе(мск сити), если хочется. тк рф, дмс, все дела. ищем активных и целеустремленных :-) по вопросам в лс -
Возможно, я честно говоря не особо следил :). Это было почти сразу после выхода маков на Apple Silicon
-
у меня на FreeBSD 19 и 21 версии работают, проблем не было пока. Нагрузка небольшая правда.
-
chown —recursive и sudo -s
это в стартовом скрипте? -
В каком стартовом?
-
я не помню где в макоси они расположены, в /etc/rc.d или еще где. Можно поискать whereis
-
В макоси же в launchd plist всё прописывается?
-
Вот вообще не помню
-
-
с докера порт то вытащили на хост?
-
Не понял, что вы имеете в виду?
-
ну чтобы подключаться по сети к приложению в докере нужно порт из этого докера вытащить на хост, либо в случае osx можно попробовать ломиться на ip вм, но это уже такое себе
-
Пошел гуглить, спасибо
-
ключ -p при запуске докер контейнера
-
Странно...
docker stop unknown shorthand flag: 'p' in -p -
строку запуска покажите
-
docker start -p clickhouse-server
-
давайте хотя бы так:
docker run -d -p8123:8123 yandex/clickhouse-server
А вообще на докерхабе есть более полная инструкция
https://hub.docker.com/r/yandex/clickhouse-server/ -
Не подключается из Python все равно
-
ошибка какая?
-
clickhouse_driver.errors.UnexpectedPacketFromServerError: Code: 102. Unexpected packet from server None:None (expected Hello or Exception, got Unknown packet)
-
curl -iv localhost:8123
-
-
Подключается
-
-
У меня всего две строки
client = Client(host='localhost', port=8123)
client.execute('SHOW DATABASES') -
Все по доке, разумеется
-
тут я уже не подскажу. Судя по ответу курла, с КХ и портами все ок.
-
оказалось, из-за того что консьюмеров в кликхаусе больше чем партишнов в топике, возможно, из-за какого-то конфликта ивенты вообще переставали сыпаться иногда, поменял на 1, пока вроде не падало)
-
понял по логу
-
да
-
Нашел костыль...
-
Вам нужен 9000 порт. Его и надо из докера наружу пробрасывать
-
А 9000 зачем?
-
-
А. Спасибо большое
-
-
-
Когда выполняю, ругается
https://pastebin.com/TkJSvdYBTraceback (most recent call last): File "/Users/olehkopyl/Dropbox/Development - Pastebin.comPastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
У вас в ошибке написана причина:
clickhouse_driver.errors.ServerException: Code: 42.
DB::Exception: Storage MergeTree requires 3 to 4 parameters:
name of column with date,
[sampling element of primary key],
primary key expression,
index granularity -
Тогда почему в доке код, который не работает?) Это прикол такой?)
-
-
Я не понимаю почему вы придираетесь к open source документации, если сами виноваты в своём незнании.
А так, - гуглите, altinity много что можно найти -
Спасибо
-
Всем привет! Возникла проблема со скоростью чтения из топика кафка. В КХ kafka движок on cluster на 4-ех нодах со параметрами:
kafka_commit_every_batch = 1,
kafka_max_block_size = 2048576,
kafka_num_consumers = 16,
kafka_thread_per_consumer = 1
Скорость 20 МБ/с. При этом сначало работал с kafka_num_consumers = 1 (скорость была 14 МБ), уже в ходе работы поднял число партиций в топике и пересоздал с kafka_num_consumers = 16 в клике, но как видно рост минимальный, может кто знает в чем может быть проблема/в какую сторону смотреть/или может примерную скорость из своей практики при чтении с кафка? -
> kafka_num_consumers = 16,
Очень много
У вас сколько сообщений в секунду? -
~1 млн
-
kafka_num_consumers = 16 какое то среднее надо держать? или из какого принципа рассчитывать
-
Вообще желательно 1
-
>kafka_commit_every_batch = 1,
С какой целью? -
Не отвечу, наследие ) Может влиять на скорость? и если его убирать то и kafka_thread_per_consumer = 0 ставить? или зависимости нет?
-
Потенциально влиять может.
Какая версия кх? -
Better settings for Kafka by filimonov · Pull Request #11388 · ClickHouse/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): Improvement Changelog entry (a user-readable short description of the cha...
-
из документации " умолчанию: 1. Укажите больше потребителей, если пропускная способность одного потребителя недостаточна."
Была мысль развернуть по несколько kafka таблиц на ноде, с одной консьюмерс_груп, такое будет работать? и будет ли лучше чем поднимать kafka_num_consumers?) -
> Была мысль развернуть по несколько kafka таблиц на ноде, с одной консьюмерс_груп, такое будет работать? и будет ли лучше чем поднимать kafka_num_consumers?)
поднимать консьюмер груп лучше чем несколько таблиц -
21.3.5.42
-
Погрепайте логи, сколько времени занимает запись во все вьюхи
-
Еще вопросик по clickhouse_driver в Python
Есть таблица
[('id', 'Int32', '', '', '', '', ''), ('word', 'String', '', '', '', '', ''), ('has_pronunciation', 'Int8', '', '', '', '', '')]
Делаю запрос
client.execute(
"INSERT INTO words (id, word, has_pronunciation) VALUES",
[{'id': 1}, {'word': "nice"}, {"has_pronunciation": True}]
)
Ошибка KeyError: 'word'
Почему, если у меня есть столбик word? -
-
Благодарю, буду тестить)
-
Делаю все ж по доке
-
Вставляете неправильно, посмотрите доку еще раз :
https://clickhouse-driver.readthedocs.io/en/latest/quickstart.html -
Ой, не то, щас
-
-
Щас еще раз проверю
-
тогда в догонку
https://kb.altinity.com/altinity-kb-integrations/altinity-kb-kafka/altinity-kb-kafka-main-parsing-loop -
Разве неправильно?
-
Ну конечно же.
-
В чем я ошибся?
-
Буду очень благодарен за подсказку
-
Олех иди домой
-
(((
-
Там прям в доке если разобраться есть все, если непонятно, смотрите примеры в гугле или блоге альтининити:
https://altinity.com/blog/clickhouse-and-python-getting-to-know-the-clickhouse-driver-clientClickHouse and Python: Getting to Know the Clickhouse-driver ClientPython is a force in the world of analytics due to powerful libraries like numpy along with a host of machine learning frameworks. ClickHouse is an increasingly popular store of data. As a Python data scientist you may wonder how to connect them. This post contains a review of the clickhouse-driver client. It’s a solidly engineered module that is easy to use and integrates easily with standard tools like Jupyter Notebooks and Anaconda. Clickhouse-driver is a great way to jump into ClickHouse Python connectivity.
-
Разобрался
-
"INSERT INTO words (id, word, has_pronunciation) VALUES",
[{'id': 1, 'word': "nice", "has_pronunciation": True}] -
Олех, мы соскучились, возвращайся к нам в чат MySQL, Святослав напек котлеток со своим фирменным белым соусом...
-
А я там разве есть?
-
-
Вот первый чат в списке мне кажется огонь
-
-
Уже жду минуты 3 вставки 87к значений
-
87к строчек по 2 колонки
-
-
Ну да
-
возможно ты вставляешь их по одной?
-
Ну да
-
Лучше sqlite пользуйтесь.
-
Почему?
-
-
тож самое, через mysql клиента все ок, а через JDBC driver MySQL wrong password
-
Мужики не серчайте, он у нас монгой болеет
-
огонь
-
-
ого, не надо так!
-
-
да вроде проблему с паролем фиксили (а может и нет), на .нете в последний раз умер тут https://github.com/ClickHouse/ClickHouse/issues/18612
-
Не знал, спасибо.
Сразу вместе все быстро вставились -
если по jdbc все ещё проблемно, откройте тикет и привяжите сюда пожалуйста https://github.com/ClickHouse/ClickHouse/issues/9336Enhanced MySQL compatibility · Issue #9336 · ClickHouse/ClickHouse
Use case The basic idea is to increase the MySQL compatibility with wire protocol in order to have tools like phpMyAdmin, DBeaver, ... working easily on ClickHouse (reading data) Describe the solut...
-
А зачем вам КХ, почему его выбрали, если не секрет?
-
Думаю посмотреть стоит ли некоторые операции проводить в КХ вместо монги
-
потратьте 2-3 часа, вам поможет.
====
Эффективное использование ClickHouse / Алексей Миловидов (Яндекс)
https://www.youtube.com/watch?v=Ac2C2G2g8Cg
Теория и практика использования ClickHouse в реальных приложениях / Александр Зайцев (LifeStreet)
https://www.youtube.com/watch?v=9MwKE30aUPs
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
https://www.youtube.com/watch?v=PLMSA_gDdyM
1. Migration to ClickHouse: Practical Guide — Alexander Zaitsev
https://www.youtube.com/watch?v=zbjub8BQPyE -
Затестил.
Для моего кейса КХ оказался всего лишь в 5.35 раз быстрее – 0.214 vs 0.04 -
Куда дальше?
Советую попробовать kdb+ -
Почему именно kdb+?
-
Ну если кх недостаточно быстр, то пора хранить данные в памяти и работать с векторами)
-
Это вроде лейкемией называется
-
Бедный Олех :(
-
Часть данных и так храню, да
-
берите exasol
-
-
-
да, вы правы. обычно монга быстрее.
-
"Самая быстрая бд". Ну да
-
откройте офф сайт и прочитайте введение, вы явно не до конца поняли зачем нужен КХ
-
интересно, если на многе размером в 2 TB запустить аналитический запрос
-
во сколько сот раз CH будет быстрее
-
Олех, попррбуйте, расскажите нам тут
-
Думаю что во много
-
В монге если запускать сложные запросы, то по скорости иногда бывает даже чистый Python обработает данные быстрее, чем монга
-
ну так ответ оевивиден - вам не нужна БД, вам нужен пейтон
-
Ща бы питоном мерять скорость)
-
пейтон - самая быстрая БД, даже быстрее монги!
-
а вы еще C++ не видели!
-
А чем измерять?)
-
если вы настоящий хипстер - то Go
-
-
-
-
в голос чето
-
Плюсы тоже не во всех случаях быстрее Python, пробовал писать аналогичные функции и C++ был быстрее только на функциях, которые выполняются очень долго
-
ну не душите человека
-
-
-
-
Не каждый день можно наблюдать такой высокий уровень технической дискуссии! Питон - это как Москва, третий, а четвёртому не бывать!
-
Чет толсто) я думаю Олех не в курсе за Россума
- 10 June 2021 (146 messages)
-
Чет толсто) я думаю я не в курсе за такие троллинги
-
Олех ну ладно мы орем в нашем чате, чо ты в другой клоуном уехал. Едь домой
-
Всем привет, подскажите, пожалуйста, как правильнее сделать.
У меня есть ReplicatedAggregatingMergeTree с таким полем:
```device SimpleAggregateFunction(argMin, Tuple(Nullable(String), Nullable(Datetime64(6)))),```
делаю INSERT'ы:
device
"(NULL,NULL)"
"('ios-native','2021-05-03 19:02:44.428000')"
"(NULL,NULL)"
При схлопывании получаю "(NULL,NULL)"
Если же ситуация получается такая:
"('ios-native','2021-05-03 19:02:44.428000')"
"(NULL,NULL)"
то при схлопывании получаю "('ios-native','2021-05-03 19:02:44.428000')"
Что хочу:
"(NULL,NULL)"
"('android-native','2021-05-05 00:02:44.428000')"
"('ios-native','2021-05-03 19:02:44.428000')"
"(NULL,NULL)"
Получать при схлопывании "('ios-native','2021-05-03 19:02:44.428000')" -
А вам принципиальна возможность хранить NULL? Я в похожей задаче просто заменял пустые значения на заведомо маленькое дефолтное через coalesce()/ifNull().
-
тогда argMin выбирает заведомо маленькое дефолтное значение =( Предлагаете использовать супер большое дефолтное значение?
-
пардон, почему-то прочитал argMax :)
ну да, тогда можно большое
понятно что костыль, но если не принципиально, то почему бы и нет
можно ещё через argMinIf() отфильтровать только нужные значения -
всем привет! вопрос по докеру и кликхаусу. добавил я себе сервис в проект в композ. пробросил волумы, запустил. создал базу тестовую, в ней 1 таблицу, накидал тестовых данных. перегрузил контейнер - данные после рестарта контейнера пропадают. а таблицы-базы - нет
может кто что посоветовать? -
спасибо за совет) попробую реализовать, посмотрю на результат)
-
у меня так, например
volumes:
- ./db/:/var/lib/clickhouse/
- ./log:/var/log/clickhouse-server/
Проблем не наблюдалось.
А какая версия образа и какие именно данные пропадают? -
Ребят, подскажите можно ли как-то реализовать такую вещь. Мне нужно получить уникальные строки с группировкой по дням(Или месяцам). При этом если например 1 числа было 2 уникальных значения, а 2 января 3 значения уникальных, но если из этих 3 значений 2 дублируют значения с 1 января. Вывести должно вот это 1 числа - 2 значения. 2 числа - 1 значение
Такой запрос решает мою проблему, но появляется проблема по памяти. Из-за оч большого обьема данных, можно ли как-то его переписать или какие варианты есть?
Select FirstDate, uniq(row) as UniqName
From (
select min(toStartOfMonth(date)) as FirstDate, row
from Table1
where date between '2021-01-01' and '2021-05-31'
group by row) t1
Group by FirstDate -
А это разве недостаточно
select min(toStartOfMonth(date)) as FirstDate, row
from Table1
where date between '2021-01-01' and '2021-05-31'
group by row -
Да, запрос был просто сильно больше. Но по памяти все равно не пускает :)
-
Вопрос больше в том, можно ли как-то оптимизировать или что можно сделать чтобы найти это первое уникальное вхождение.
-
-
данные из таблиц пропадают. любые. которые записал
версию образа не указывал, последняя
волумы пробросил так
volumes:
- cl-data:/var/lib/clickhouse
- ./phpdocker/clickhouse/config.xml:/etc/clickhouse-server/config.xml
- ./logs/clickhouse:/var/log/clickhouse-server/:rw
volumes:
pg-data:
pg-admin:
cl-data: -
Странно 🤷♂️ А в конфиге случайно путь не переопределен?
<path>/var/lib/clickhouse/</path> -
не знаю как задать дефолтноне значение для ```SimpleAggregateFunction(argMin, Tuple(String , Datetime64(6))``` =(
потому что coalese не очень подходит, т.к. придется во всех вьюхах это прописывать -
<!-- Path to data directory, with trailing slash. -->
<path>/var/lib/clickhouse/</path> -
тогда идей нет почему так. Если только volume не удаляется такого быть не должно
-
У кого-нибудь была проблема подключения через DataGrip к серверу кликхаус через порт 8123?
-
неа
покажи креды подклчения -
Что показать?
-
Логин default
-
Я использую EC2 aws, на других серверах такого не было
-
-
connect_timeout_with_failover_ms
по пробуй увеличть на стороне кликхауса -
надо сервер обновить и тогда datetime64 частично будет работать, но опять же есть нижний предел
-
То есть заменять работу с Date на работу с DateTime64?
-
Костыль конечно, но. Можно использовать тот же long но отрицательный
-
ну дак надо наверное сначала 8123 в EC2 файрволе открыть в консоли AWS на доступ...
но лучше VPN какой нибудь под ваш VPC поднять -
https://clickhouse.tech/docs/ru/whats-new/changelog/#improvement_3
New Feature
Extended range of DateTime64 to support dates from year 1925 to 2283. Improved support of DateTime around zero date (1970-01-01). #9404 (alexey-milovidov, Vasily Nemkov). Not every time and date functions are working for extended range of dates.2021 | ClickHouse DocumentationClickHouse release v21.10, 2021-10-16 Backward Incompatible Change Now the following MergeTree table-level settings: rep
-
А как?((
-
Не, это совсем не вариант. Хочется же функции работы с датой использовать. Так-то можно и строкой даты хранить...
-
а кто у вас AWS занимается?
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.htmlAuthorize inbound traffic for your Linux instances - Amazon Elastic Compute CloudCreate security groups to control the network traffic that can reach your Amazon EC2 instances.
-
Я тут один за всех))
-
Я открыл порты в aws
Теперь данная ошибка
javax.net.ssl.SSLException: Unsupported or unrecognized SSL message. -
это вы пытаетесь на 8123 порт ходить? или куда?
-
Ага
-
на нем нет SSL
выключите SSL в настройках DataGrip драйвера -
Заработало! Спасибо!!
-
но не советую так ходить
лучше посмотрите что у вас в настройках
SELECT * FROM system.settings WHERE name ='https_port'
и используйте SSL + этот порт для подключения -
Ничего нет
-
нужно от лица всего сообщества сделать предложение авторам clickhouse реализовать новый соответствующий стандарту тип данных UnixTimestamp и под него переписать все функции преобразования
или позаимствовать исходные коды у postgresql что ли. -
Кто может подсказать по аналогичной проблеме.
-
=))) от лица сообщества с такими предложениями вы можете сделать Pull Request ;)
=)) предложение заимствовать код PostgeSQL прекрасно ;)
говорит о том что вы либо не программируете сами, либо пишете что-то простое
внутри ЛЮБОГО UnixTimestamp обычный UInt32
что вам от него еще надо?
зачем вам типа UnixTimestamp который эквивалентен UInt32? -
есть DateTime32
-
Добрый день создаю таблицу
CREATE TABLE kafka_test ON CLUSTER test_shard
(
event_time DateTime64(3),
traced UInt8
) ENGINE = Kafka()
SETTINGS
kafka_broker_list = 'test:9092',
kafka_topic_list = 'test',
kafka_group_name = 'group_test',
kafka_format = 'Avro';
При запросе данных select, выдает ошибку
std::exception. Code: 1001, type: avro::Exception, e.what() = EOF reached (version 21.3.2.5 (official build))
что делаю не так? -
+1, сообщество, которое качает права - это не члены сообщество, а просто паразиты этого сообщества :)
-
потому что там не UInt32 а Int32
читаем доку https://clickhouse.tech/docs/ru/sql-reference/data-types/datetime/
в тексте ссылка Момент времени сохраняется как Unix timestamp,
а по ссылке описание
https://ru.wikipedia.org/wiki/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F
В программах для хранения Unix-времени используется целочисленный знаковый тип.DateTime | Документация ClickHouseDateTime Позволяет хранить момент времени, который может быть представлен как календарная дата и время. Синтаксис: DateT
-
уважаемые знатоки, внимание вопрос.
у меня сейчас так: PARTITION BY (os, toYYYYMMDD(t)) ORDER BY (event_type, t)
имеет ли смысл добавлять os в ORDER BY если он уже в PARTITION BY? os участвует в запросах только в качестве точного сравнения =,!=,in -
спасибо что поправили =) так, а в чем проблема то ?
стандартный тип Date будет зависеть от UnixTimestamp который Int32
Date32 или Date64 возможно реализуют в будущем, когда кому то надо будет компактную часть от Date хранить
расширять текущий Date до расширенных диапозонов, ну. для этого надо сделать PR
и еще данные из старого формата сконвертировать "на лету"
не думаю что это хорошая идея :) -
и ещё вопрос. есть ли возможность указать в таблицах AggregatingMergeTree/ReplacingMergeTree и т.д. где-нибудь в настройках самой таблицы или даже всего сервера, чтобы при селектах всегда использовался FINAL. Я тут прочитал, что в движке MaterializeMySQL используется FINAL на автомате и задумался, может как-то можно сделать подобное поведение и в других движках?
https://clickhouse.tech/docs/ru/engines/database-engines/materialize-mysql/#selectMaterializeMySQL | Документация ClickHousetoc_priority: 29 toc_title: MaterializeMySQL MaterializeMySQL Создает базу данных ClickHouse со всеми таблицами, существ
-
в MaterializeMySQL там движок БАЗЫ
а не таблицы
FINAL на автомате использовать. так себе идея, потому что просадка по CPU весьма существенная, человек явно должен понимать зачем ему AggregatingMergeTree и что это дает... -
этой просадкой я готов пренебречь :) а вот обарачивать вьюхой и делать FINAL в ней - это уже просадка, которая мне не очень нравится :)
-
Так вьюха же вам наоборот данные будет подготавливать заранее +/-
-
именно материальная вьюха
-
По идее смысла нет, ибо чтение будет происходить только из нужных партиций, в которых и так только одно значение os.
Но в какой-то из 19.х версий у меня партишн прунинг для ключа toYYYYMMDD(LOADED) по условию LOADED >= now() - interval 3 days не работал - читались все партиции. Но если я менял условие на toYYYYMMDD(LOADED) >= toYYYYMMDD(now() - interval 3 days), то работал.
На 20.8 такой проблемы уже не замечал. -
Подскажите, есть планы по оптимизации в условиях?
select if(f > 0, 1, f / 0) from table where f > 0 limit 5
Code: 153, e.displayText() = DB::Exception: Division by zero (version 20.8.4.11 (official build)) -
я про обычную вьюху, материальная сделает только хуже (мат вью в клике - это просто инсерт тригер). мне LIVE больше поможет.
-
я читал про такой же баг, но только с toYYYYMM, типа такое вообще никогда не работало и читало все партиции. можно в чатике найти это обсуждение
-
ну вы готовы, а другие нет
явное всегда лучше "не явного" -
https://github.com/ClickHouse/ClickHouse/pull/23367
подписывайтесь и следитеImplement short circuit function evaluation by Avogar · Pull Request #23367 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
Спасибо
-
добрый день.
как заставить кликхаус забыть о репликах?
был кластер с шардами по 3 реплики. недавно вывели по 1 реплики из каждого шарда. и теперь не проходят распределённые DDL запросы с формулировкой Alter is not finished because some replicas are inactive right now <выключенная реплика>. Alter will be done asynchronously. (version 19.16.19.85 (official build)) -
SYSTEM | ClickHouse Documentation
SYSTEM Statements The list of available SYSTEM statements: RELOAD EMBEDDED DICTIONARIES RELOAD DICTIONARIES RELOAD DICTI
-
спасибо! надеюсь, на нашей версии заведётся :)
-
проясните пожалуйста что хранится в /var/lib/clickhouse/store/ ,
если указаны дериктивы storage_configuration
<storage_configuration>
<disks>
<disk_ssd>
<path>/data/fast/</path>
</disk_ssd>
<disk_hdd>
<path>/data/slow/</path>
<keep_free_space_bytes>10485760</keep_free_space_bytes>
</disk_hdd>
</disks>
<policies>
<moving_from_ssd_to_hdd>
<volumes>
<hot>
<disk>disk_ssd</disk>
<max_data_part_size_bytes>1073741824</max_data_part_size_bytes>
</hot>
<cold>
<disk>disk_hdd</disk>
</cold>
</volumes>
<move_factor>0.3</move_factor>
</moving_from_ssd_to_hdd>
</policies>
</storage_configuration> -
в v20.12.3.3 поправили.
Ну и если у него версия младше, добавление в order by не поможет, да -
так я и хочу "явно указать" в настройках таблицы или движка, а не выступаю "давайте сделаем такое поведение дефолтным для всех".
вот и подумал, что тут аналогично MaterializeMySQL сделали.
а про явное/неявное - это вообще холиварная тема, тут большинство вопросов "почему у меня дубли" или "почему ничего не схлопывается", т.е. для большинства людей, которые не прочли этого в документации дефолтное поведение кликхауса как раз таки и является неявным. -
ещё вопрос:
>Too many parts (300). Merges are processing significantly slower than inserts.
это означает, что у меня много партиций и мне нужно PARTITION BY (os, toYYYYMMDD(t)) поменять на PARTITION BY (os, toYYYYMM(t)) ?
или наоборот у меня много кусков в одной партиции и мне нужно PARTITION BY (os, toYYYYMMHH(t)) ?
после того как прочёл документацию, то склонялся к первому варианту, прочитав её же на английском уже склоняюсь ко второму варианту :)
посмотреть количество кусков в одной партиции можно вот так, верно?
SELECT table, partition, count()
FROM parts
WHERE active = 1
GROUP BY table, partition
ORDER BY count() DESC
у меня тут максимум 13 активных блоков на партицию получается, а не активных 116. хз откуда 300 взялось в ошибке. -
Это значит, что в одной партиции слишком много партов. Обычно это связано с тем, что добавление новых кусков происходит медленнее, чем слияние старых.
Может помочь увеличение количества вставляемых за раз записей (рекомендуется до 1 млн) и увеличение числа потоков для фоновых мерджей (настройка background_pool_size). -
у вас проблема с partition key, понизьте его кардинальность
-
-
Коллеги, привет.
Никто не заморачиватся с Datasource плагином для Grafana, чтобы можно было добавить визуализацию логов. Например, как для Loki ?
https://grafana.com/docs/grafana/latest/explore/logs-integration/ -
получается, что если понижу кардинальность partition key, то в одной партиции будет ещё больше блоков и будет только хуже
-
При вставке батч бьётся на партсы, если мержить не успевает и накапливается 300+(по дефолту) партсов - вставка стопается.
-
Выше уже написали, в вашем случае количество партиций будет меньше, но это не значит, что партов будет больше
-
Кажется нелогичным, что DateTime32/64 есть, а Date32/64 нет.
А если не секрет почему не сделали Date32? Ведь такие планы были. Руки не дошли или там есть технические проблемы? -
спасибо. можно как-то глянуть, сколько сейчас ещё не смёрженых партов? насколько я понял в system.parts where active=1 - это те, которые уже были смёржены
-
select *
from system.parts
where table = <table>
and active
это активные парты -
-
ну * оверхед, но да, каждая строка - 1 parts, если еще подробнее надо, есть еще parts_columns
-
parts_columns я тоже смотрел, мне интересно глянуть сколько на текущий момент несмёрженых партов ожидают в очереди.
-
Но ведь это никак не поможет с решением проблемы. Ошибка же возникает именно при превышении лимита на число партов в одной партиции. А с уменьшением числа партиций вероятность увеличения числа партов в ней (в сферическом вакууме незнания вставляемых данных) только увеличивается.
-
Не согласен, если у человека не* миллиард записей в секунду и ttl не на 1 день, то ключ партиционирования был избыточен
Уменьшив кардинальность можно уменьшить количество созданных партов при 1 инсерте -
Я кстати сделал бы order by (os, toDate(t),...) partition by toYYYYMM(t).
Это судя по всему +-классика для большинства кэйсов. -
видимо так и сделаю. ожидалось, что стату будут смотреть по платформам отдельно, но в итоге как обычно смотрят всё1 скопом, так что партицирование по os избыточно
-
Добрый день!
Подскажите, как вывести объектом несколько полей ключ/значение с разными типами? то есть хочу вывести {"key1":1, "key2":0.1, "key3":"STRING"} -
у меня вставка раз в минуту около 10к записей, поштучно вставляются только через буферную таблицу из неё только батчами раз в минуту. всего миллиард записей. нагрузка на диск и проц - околонулевая. никаких зукиперов и т.д. и тут на совершенно ровном месте такая хрень :) нету у меня миллиона записей за раз :)
-
Насчёт увеличения числа партов на партицию был неправ, согласен, оно должно остаться неизменным. Не понимаю почему оно должно уменьшиться.
Возможно, я чего-то не понимаю. Можете на примере проиллюстрировать?
Вариант 1 - ключ партиционирования (A, B), оба ключа могут принимать только значения [0, 1], т.е. есть всего 4 партиции: 00, 01, 10 и 11.
Вариант 2 - ключ партиционирования (A), ключ принимает значения [0, 1], т.е. всего две партиции: 0 и 1.
Если вставка идёт раз в 5 секунд пачками по 1млн равномерно размазанных по партициям данных, то в первом случае имеем по 12 партов по 250к записей на каждую партицию в минуту, всего 48 партов, во втором случае имеем по 12 партов по 500к на каждую партицию в минуту, всего 24 парта.
Но если данные размазаны по партициям неравномерно с перекосом, например, в (0, 0), то в первом случае будут те же 12 партов на партицию, только где-то они будут по, скажем, 700к, а где-то - по 100к. Во втором случае тоже по 12 партов на партицию, только по 800к и по 200к.
Т.е. суммарное количество партов уменьшится, но число партов на партицию не изменится. Но ошибка-то возникает именно из-за большого количества партов на одну партицию. -
Ололо, господа
Есть табличка в 2М строк, в табличке поле типа Array(String)
Скип индекс типа bloom_filter с разными циферками - счастья не дает.
Селекты работают безобразно долго, и влегкую упираются в лимит по памяти. Денормализовать и дублировать строки - показалось неразумным, т.к. эти 2М строк тутже превращаются в 38М. Пришлось наооборот, нормализовывать и вынести копию этого поля в отдельную таблицу.
Какие варианты еще имеет смысл пощупать? -
Или денормализация будет в самый раз?
-
Думаю, некорректный пример в том смысле, что кардинальность обоих полей всего 2. Была бы 10 и 100, то за несколько вставок можно было бы вставкой опередить мержи по количеству партов
-
т.е. если у меня таблица с хреновым высококардинальным ключём (uuid) и происходит вставка 1000 строк, то эти строки разбиваются на парты, которые будут затрагиваться и после этого оказываются задеты чуть ли ни все парты таблицы, что создаёт немерено мёрджей, которые могут не успеть обработаться до следующей вставки и следующая вставка может привести к той проблеме, которую я словил?
-
ну может вы и правы
-
DateTime32, DateTime64 нужны были для милисекунд ну и попутно диапозоны дат расширили
там на этих типах то куча корнер кейсов вылезла и их доводили не один месяц -
Ну да, они же по итогу будут лежать в разных партициях.
Instert - parts - merge - partition -
-
-
спасибо, кажется до меня дошло. У меня вот такая таблица на несколько лямов:
CREATE TABLE users (%columns) Engine AggregatingMergeTree PARTITION BY (os) ORDER BY (device_id);
в неё данные попадают с помощью мат вью из таблицы событий. и видимо таблица перезаписывается из-за таких действий чуть ли не каждый раз.
сейчас в этой таблице 20 активных партов и 120 неактивных.
видимо ошибка "Too many parts (300). Parts cleaning are processing significantly slower than inserts: while write prefix to view events_to_users" как раз таки и обозначает, что куча старых партов и они удаляются медленнее, чем появляются новые. обидно только то что кликхаус почему-то не утилизирует доступные ресурсы, чтобы такой ситуации не возникало. мне походу придётся подкрутить какие-то параметры или мигрировать на EmbeddedRocksDB и делать агригацию уже самостоятельно на уровне приложения. -
-
-
ну, ключ партицирования у меня os, а их всего 3 штуки, так что партиций у меня только 3
-
-
Ну можно же аккумулировать записи перед вставкой в первую таблицу, на которой висит MV, или из MV вставлять в тот же Buffer, например.
-
Ну я правильно понимаю, что идея не в уменьшении числа новых партов на партицию, а в ускорении мерджей засчет уменьшения общего количества новых партов на все партиции?
-
Йеп, вы правильно поняли, может я не совсем точно выразился в первый раз
-
у меня есть буферы и вставка пачками раз в минуту. проблем в том, что у меня order by uuid, т.е. высококардинальный ключ сортировки (о чём мне уже писали выше, но я поначалу не придал этому значения). в итоге одна вставка раз в минуту 1к рандомных юзеров задевает все парты и так каждую минуту. видимо в какой-то момент накопилось много партов и я словил ошибку
-
UPD:
сори, я не вник до конца, дата тут не причем.
Я могу ошибаться, но вроде как должно так работать, надеюсь если я не прав - поправят:
1. идет вставка в основную таблицу на которую смотрит МВ
2. она мержится по ключу ORDER BY
3. эти данные бьются на PARTITION BY (получаются parts)
4. пишутся на диск -
Доброго времени суток , подскажите что за зверь
Size of marks file is inconsistent
встречается в версиях 21.6.3 21.1.2.15 -
Еще важный момент, удаление вообще не связано, оно совсем в фоне происходит(если диск не забит). Вам важны только активные
Глупый вопрос, но падает точно конкретно эта часть а не запись евентов например, или другая мат вью которая пишет в эту таблицу? -
Всем привет, пытаюсь удалить таблицу 250GB, получаю Size (253.20 GB) is greater than max_[table/partition]_size_to_drop (50.00 GB), потом пытаюсь добавить флаг для форс удаления, sudo touch '/var/lib/clickhouse/flags/force_drop_table' && sudo chmod 666 '/var/lib/clickhouse/flags/force_drop_table, некоторое время висит, флаг пропадает, и та же ошибка
-
интересно, у всех неактивных партов в несколько раз больше чем активных? у меня на локалке неактивные пропадают достаточно быстро, а на серваке их куча
-
IO то мониторите? Там всё норм?
-
да, только на эту мат вью ругается. увеличил parts_to_throw_insert до 1000 - больше не ругается :) но я понимаю, что это временно
-
посмотрите не по таблицам в общем, а по партициям, возможно понятнее будет
-
Ключ сортировки и ключ партиционирования - это разное. Вставляемый батч бьётся на парты по ключу партиционирования и данные в каждом парте сортируется по ключу сортировки. Высококардинальный ключ сортировки не влияет на количество партов.
-
да, там вообще всё почти на нулях. прям хоть назад parts_to_throw_insert на 300 менять и проверять, будет валиться или нет
-
Имхо у вас много партов в целом. С другой стороны, если не тормозит, то ок.
-
партов много по большей части из-за того что у меня партицирование по дням, но в пересчёте на одну партицию у меня не больше 13 партов, т.е. в 300 не должен был упереться, но возможно AggregatingMergeTree почему-то затупил и долго их не мёржил, может из-за того что я пару колонок новых добавлял или типа того
-
Если не принципиально попробуйте удалить партиции и потом таблицу
-
Да все хуже уже )) я поменял конфиг в кластере, который позволяет удалять таблицы любого размера, рестартнул его (altinity k8s operator) и все, приехали, теперь pod работает вроде, в логах пусто, или я не особо понимаю что смотреть, но соединения нода не принимает, connection refused
-
В логах пода, liveness probe failed, http:/.../ping
-
А в логах кх что?
-
Ну вот, в err какой-то плюсовый стектрейс, и в stdout не помню, ничего особенного, отошёл на полчаса, вернусь скину
-
Ну если я правильно помню там стектрейс связан с каким-то старым запросом, перепроверю
-
Очень странная ситуация, короче
-
Мб конфиг поломали, если меняли только его.
-
Ну я его обратно вернул, и то же самое
-
Добрый вечер. Подскажите, пожалуйста, как вытянуть данные для функций типа covarPop/corr, если эти данные хранятся в строках, а не в столбцах? Допустим, что есть таблица, в которой лежат unique_instrument_id, date, measurement. Хочется вычислить коэффициент корреляции между значениями measurement для нескольких пар инструментов в заданном диапазоне дат. То есть на вход подаётся что-то вроде массива инструментов [("A, "B"), ("C", "D"), ...] и две даты. На выходе хотелось бы получить таблицу с двумя колонками, в первой — пара инструментов, во второй — посчитанный коэффициент.
-
2021.06.10 20:47:25.186270 [ 57 ] {} <Debug> SystemLog (system.metric_log): Will use existing table system.metric_log for MetricLog
2021.06.10 20:47:25.189409 [ 57 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk `default`, having unreserved 1.81 TiB.
2021.06.10 20:47:29.006221 [ 68 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d): Removing part from filesystem 202106_975458_975458_0
2021.06.10 20:48:18.468512 [ 45 ] {} <Information> Application: Received termination signal (Terminated)
2021.06.10 20:48:32.812418 [ 57 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk `default`, having unreserved 1.81 TiB.
2021.06.10 20:48:32.815785 [ 56 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d): Removing part from filesystem 202106_975459_975459_0
2021.06.10 20:48:32.816169 [ 56 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d): Removing part from filesystem 202106_975460_975460_0
2021.06.10 20:48:32.816458 [ 56 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d): Removing part from filesystem 202106_975461_975461_0
2021.06.10 20:48:40.318576 [ 57 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk `default`, having unreserved 1.81 TiB.
2021.06.10 20:48:40.321110 [ 59 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d) (MergerMutator): Selected 6 parts from 202106_975226_975466_52 to 202106_975471_975471_0
2021.06.10 20:48:40.321181 [ 59 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk `default`, having unreserved 1.81 TiB.
2021.06.10 20:48:40.321222 [ 59 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d) (MergerMutator): Merging 6 parts: from 202106_975226_975466_52 to 202106_975471_975471_0 into Compact
2021.06.10 20:48:40.321554 [ 59 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d) (MergerMutator): Selected MergeAlgorithm: Horizontal
2021.06.10 20:48:40.360020 [ 59 ] {} <Debug> system.metric_log (606a01e1-3473-4f65-be72-556f5b70aa6d) (MergerMutator): Merge sorted 2658 rows, containing 260 columns (260 merged, 0 gathered) in 0.038800871 sec., 68503.61683891065 rows/sec., 135.23 MiB/sec.
2021.06.10 20:48:40.365163 [ 59 ] {} <Debug> MemoryTracker: Peak memory usage: 16.27 MiB.
2021.06.10 20:48:47.824301 [ 57 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk `default`, having unreserved 1.81 TiB.
из последнего, в crashloop ушел -
а в кх нет функционала для парсинга xml? метода ,куда передать xpath?
-
Logging debug to console
2021.06.10 20:56:19.465891 [ 1 ] {} <Information> SentryWriter: Sending crash reports is disabled
2021.06.10 20:56:19.537456 [ 1 ] {} <Information> : Starting ClickHouse 20.8.13.15 with revision 54438, build id: 9A3F8C853C289745, PID 1
2021.06.10 20:56:19.537598 [ 1 ] {} <Information> Application: starting up
2021.06.10 20:56:19.543827 [ 1 ] {} <Information> Application: It looks like the process has no CAP_IPC_LOCK capability, binary mlock will be disabled. It could happen due to incorrect ClickHouse package installation. You could resolve the problem manually with 'sudo setcap cap_ipc_lock=+ep /usr/bin/clickhouse'. Note that it will not work on 'nosuid' mounted filesystems.
2021.06.10 20:56:19.543938 [ 1 ] {} <Information> StatusFile: Status file /var/lib/clickhouse/status already exists - unclean restart. Contents:
PID: 1
Started at: 2021-06-10 20:54:08
Revision: 54438
есть такая интересная штука -
и такая от бэкапа 2021/06/10 20:00:08 CreateBackup error: clickhouse data path is unknown, you can set data_path in config file
2021/06/10 20:01:08 Upload error: clickhouse data path is unknown, you can set data_path in config file -
он поднимается, начинает что-то делать (сервер не отвечает), и потом сразу падает почти, из интересного вижу только
<Information> Application: Received termination signal (Terminated)
в err log ниче, все старое -
вот еще ивенты Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned clickhouse/chi-risk-aggregator-main-0-0-0 to k8s-highpri-20631152-vmss000005
Normal SuccessfulAttachVolume 26m attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-0eabf302-d79c-460a-9108-1f49e5cf57ed"
Normal SuccessfulAttachVolume 26m attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-83bba03c-7688-4642-a1c3-13712fcfef9e"
Warning FailedMount 25m kubelet, k8s-highpri-20631152-vmss000005 Unable to attach or mount volumes: unmounted volumes=[log-volume-template], unattached volumes=[chi-risk-aggregator-common-configd chi-risk-aggregator-common-usersd chi-risk-aggregator-deploy-confd-main-0-0 data-volume-template log-volume-template default-token-vscvp]: timed out waiting for the condition
Normal Pulling 25m kubelet, k8s-highpri-20631152-vmss000005 Pulling image "busybox"
Normal Started 25m kubelet, k8s-highpri-20631152-vmss000005 Started container clickhouse-backup
Normal Pulled 25m kubelet, k8s-highpri-20631152-vmss000005 Container image "alexakulov/clickhouse-backup:0.6.4" already present on machine
Normal Created 25m kubelet, k8s-highpri-20631152-vmss000005 Created container clickhouse-backup
Normal Pulled 25m kubelet, k8s-highpri-20631152-vmss000005 Successfully pulled image "busybox"
Normal Created 25m kubelet, k8s-highpri-20631152-vmss000005 Created container clickhouse-log
Normal Started 25m kubelet, k8s-highpri-20631152-vmss000005 Started container clickhouse-log
Normal Killing 24m kubelet, k8s-highpri-20631152-vmss000005 Container clickhouse failed liveness probe, will be restarted
Normal Started 23m (x2 over 25m) kubelet, k8s-highpri-20631152-vmss000005 Started container clickhouse
Normal Created 23m (x2 over 25m) kubelet, k8s-highpri-20631152-vmss000005 Created container clickhouse
Normal Pulled 15m (x6 over 25m) kubelet, k8s-highpri-20631152-vmss000005 Container image "yandex/clickhouse-server:20.8.13.15" already present on machine
Warning BackOff 5m34s (x22 over 11m) kubelet, k8s-highpri-20631152-vmss000005 Back-off restarting failed container
Warning Unhealthy 40s (x81 over 24m) kubelet, k8s-highpri-20631152-vmss000005 Liveness probe failed: Get http://10.240.1.180:8123/ping: dial tcp 10.240.1.180:8123: connect: connection refused -
-
-
Недавно лярд записей обновлял, кратковременно нагрузка поднялась, но не критично.
-
-
Виртуалка :)
-
50 евро, 32 гб оперативы, 8 вирт ядер
-
-
-
-
Ну при джойне и у меня 100% нагрузка на диск и проц :). Кх - колоночная бд. По идее если апдейтить одну колонку, то только её и будет на диске переписывать.
- 11 June 2021 (233 messages)
-
max_table_size_to_drop в настройках поменяйте =)
-
флаг ставите, drop делаете. дроп должен успешно пройти. а флаг исчезнуть. Для каждого нового дропа отдельный флаг.
-
Всем привет. Подскажите пожалуйста. Пытаюсь использовать s3
``` INSERT INTO S3(
'https://some.s3.us-east-2.amazonaws.com/test.csv.gz',
'some value',
'some value',
'CSV',
'name String, value UInt32',
'gzip')
VALUES ('test-data', 1),
('test-data-2', 2); ```
и получаю ошибку
Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 32 (''https://test-tanir-sdv.s3.us-east-2.amazonaws.com/test.csv.gz'') (line 2, col 16): 'https://test-tanir-sdv.s3.us-east-2.amazonaws.com/test.csv.gz', 'AKIAY7FF2GBWCKKCKFWN', '51JpMKPm523kjGU/UT8oFMkLi2TzNO1Gjt8QQxrm. Expected one of: insert element, qualified asterisk, asterisk, compound identifier, identifier, COLUMNS matcher, list of elements, COLUMNS (version 21.6.3.14 (official build))
в чем может быть проблема? Пример скопирован из документации. Сам clickhouse последней версии -
'https://some.s3.us-east-2.amazonaws.com/test.csv.gz', - и дальше, это что? имена полей??
-
дальше access key и secret https://clickhouse.tech/docs/ru/sql-reference/table-functions/s3/
-
может INSERT INTO FUNCTION s3( ?
-
да, в доке без функции, странно
-
-
ну в документации по ссылке про это ничего нет
-
-
Нужно мнение более опытных коллег %)
-
-
Надо наверно pr сделать (сделал)
-
Всем привет! Подскажите, пожалуйста, правильно ли я понимаю, что если выбрать движок replacingMergeTree, то он будет удалять дублирующиеся записи по ключу сортировки только внутри отдельных партиций? Дубли из разных партиций не будут схлопнуты?
-
у вас ЗАМЕНА (не удаление)
происходит по одинаковым выражаниям ORDER BY
при background merge \ mutation merge
который происходит в рамках одной PARTITION
так что при слиянии parts объединения не будет
но при SELECT ... FINAL уже будет
пример
CREATE TABLE t1 (dt DateTime, cat LowCardinality(String), v UInt64) ENGINE=ReplacingMergeTree() PARTITION BY toYYYYMM(dt) ORDER BY cat;
INSERT INTO t1 VALUES(NOW(), 'test', 1);
INSERT INTO t1 VALUES(NOW()-INTERVAL 1 MONTH, 'test', 2);
// две записи
SELECT * FROM t1;
// одна запись
SELECT * FROM t1 FINAL;
OPTIMIZE TABLE t1 FINAL;
// все еще две записи, потому что слияние в рамках партиции
SELECT * FROM t1;
// все еще одна запись
SELECT * FROM t1 FINAL; -
Понял, спасибо большое!
-
У меня есть ещё вопрос, менее мне понятный. У меня табличка со следующей структурой:
id
Row_num - номер строки для ключа id
Разные поля с данными
Date - дата загрузки в клик
И мне нужно при селекте из нее по ключу выдавать только строки с максимальным Date для ключа
Я сделал вьюху типа
Create view vMaxDate as select id, max(date) as maxDate from table
И сделал вторую вью
Create view final as select * from table join vMaxDate on id = id and date = maxDate
Но получается, что при селекте из последней вьюхи типа
Select * from final where id = 1
Клик сначала найдет максимальную дату для всех id, и только потом будет фильтроваться на id = 1. Можно ли как-то в клике прокидывать фильтр внутрь вьюхи, так чтобы он сразу видел фильтр и искал максимальную дату именно для требуемого ключа -
все проще, argMax есть
-
Да, я про него знаю
Но у меня к сожалению есть кейсы, когда строки раньше приходили с конкретным row num, а сейчас не приходят
Мне надо их отбрасывать -
Argmax будет мне выдавать в том числе и максимальную по дате строку для удаленных row num
-
да и вообще если по каждому ключу, сделайте просто max и группировку.
так вы фильтр добавьте -
Не совсем понял :(
-
ну вы придумываете велосипед какой-то, кмк.
у вас простая задача: есть ключи, и еще 2 арибута(row, дата)
вам нужно выбрать все ключи и максимальную дату к ним(возможно нужны фильтры):
select key, max(date) from tab [where row=value] group by key
так? -
Ну фильтры по row вряд ли легко получатся, они могут быть разные для разных ключей
В целом да, нужен такой селект, и нужно потом результат джойнить на всю таблицу, чтобы выбирать строки с максимальной датой, и не хотелось бы, чтобы при каждом таком джойне заново рассчитывалась максимальная дата для каждого ключа -
Хм, я вот думаю, можно же такой запрос с группировкой не вьюхой делать, а например материализованной вьюхой
-
Дайте пожалуйста ddl таблицы и кратко сформулируйте проблему. Сложно понять, что вы хотите.
-
Доброе утро, по вот этому вопросу кто-нибудь может подсказать?
-
Ddl
Id - ключ таблицы (по нему несколько строк)
Row - номер строки для ключа
Разные атрибуты с данными
Date - дата загрузки в клик
Нужно сделать такую вьюху, при обращении к которой для ключа id будет находиться максимальная дата загрузки Date и выдаваться все строки по ключу с такими Date. При этом к вьюхе запросы в основном будут с фильтром с конкретным значением id и хотелось бы, чтобы при расчете не искались максимальные date для всех остальных ключей. И при этом бывают удаленные row, какие-то номера, которые больше не приходят, это не даёт возможность использовать argmax -
Всем привет, прочитал, что кликхаус по дефолту нулы при full join-e не генерирует, а как это тогда работает? Что будет в колонках, где нет значений?
-
DDL
это
SHOW CREATE TABLE db.table -
Ничего не понятно, но с вьюхой будет дико тормозить. Проброс параметров есть, но сильно костыльный, через параметр в сеттингс. Вам нужнжна матвью, которая для каждого айдишника будет вычислять максимальную дату.
-
Да, попробую с матвью, спасибо!
-
С функциями типа covarPop/corr мало кто работал. Покажите ддл, чтобы было видно в какок формате у вас сейчас данные и напишите в каком формате их хотите получить.
-
https://t.me/MacSoftwareFree/180
This is a channel that focuses on Mac free cracking software. They are free forever and are updated weekly.Mac software crack freeFast, lightweight and easy-to-use PDF editor Easily complete PDF editing, reading, annotating, editing text, adding photos, filling in forms, signing contracts, merging PDF documents, and encryption protection on MAC with just a few clicks, an unprecedented experience. The latest free cracked version, and it is free forever!
-
Всем привет, какие есть лучшие практики для задачи репликации postgres -> clickhouse? Т.е., работает основная база на pg, а для аналитики сбоку стоит Clickhouse с +- актуальными данными.
Как-то сходу не гуглится/дукдучится. Т.е., нашёл несколько ссылок - https://github.com/mkabilov/pg2ch, https://pypi.org/project/synch/ и ещё что-то. Но как-то не завелись они с полпинка, а сходу лезть в дебаг не хотелось бы.
Кто что использует для такой задачи?GitHub - mkabilov/pg2ch: Data streaming from postgresql to clickhouse via logical replication mechanismData streaming from postgresql to clickhouse via logical replication mechanism - GitHub - mkabilov/pg2ch: Data streaming from postgresql to clickhouse via logical replication mechanism
-
Движок есть postgresql уже в кх
-
Я тоже только изучаю. С Oracle данные в Clickhouse перегонял с помощью DATAX
А еще есть JDBC Bridge -
Ага, вот им и перетянул данные, но как это делать "на постоянной основе", т.е., чтобы WAL синхронизировался?
-
Или имеете в виду - создавать БД на движке postgres и (как-то) реплицировать?
-
Не проще просто сделать реплику для постгре именно в постгре, простите, но я не вижу смысла в том, чтобы лить тупо из постгри в кх.
-
Ага, спасибо за ответ. Просто слышал в подкасте, что CH хорошо подходит для всякой аналитики, есть там какие-то плюшки, которых нет в PG, вот и решил попробовать в качестве эксперимента.
-
вот вышеуказанное и придется заводить
лезьте в дебаг =)
ну или ждите когда зарелизят
https://github.com/ClickHouse/ClickHouse/pull/20470MaterializePostgreSQL table engine and database engine by kssenii · Pull Request #20470 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
Я б понимал бы, если вы будете преобразовывать данные и хранить в КХ для аналитики уже processed data из постгри. :)
-
думаю вам в clickhouse рано =)
думаю у вас данных столько нет ... -
ну шо как сразу обрубаити (сорказмь)
-
Например - в postgres есть ограничение на уникальный ключ/констрейнт для секционированных таблиц, если ключ секционирования задан выражением. А в кликхаусе этого ограничения нет.
-
А какой "порог входа" в CH (в строках)? :)
-
ну =) зато в clickhouse вообще UNIQUE KEYS нет =)
-
Use-case смотрите свой, дело даж не в технической стороне вопроса, а в целесообразности использования подхода :)
-
-
Да? А что тогда такое PRIMARY KEY в DDL - это не то, что я думаю? =)
-
он не в строках
чтобы все получилось, ситуация должна быть так "мы ХОРОШО (на низком уровне) знаем как работает наша текущая БД и понимаем почему она тормозит на нашем use case и понимаем почему в clickhouse будет работать быстрее"
а все остальное
"ой я слышал clickhouse модный"
либо "ой давайте все аналитические данные сразу в clickhouse будем хранить"
обычно не очень хорошо кончается =) -
С постгрей отчасти "импортозамещение" канает %)
-
Спасибо за ответ, вполне резонно.
-
вот вообще не то =)
PRIMARY KEY это вот прямо PRIMARY KEY
а не UNIQUE CLUSTERED INDEX как в MySQL и UNIQUE B-Tree INDEX как в Postgre -
Ага, интересно... Наверное, в кликхаус мне действительно рано (-:
-
если у вас сейчас postgres и хочется в рамках аналитики поиграться в этой экосистеме
посмотрите в сторону CItus Columnar Extension
https://www.citusdata.com/Citus Data | Distributed Postgres. At any scale.Citus transforms Postgres into a distributed database you can run at any scale. By distributing your data and parallelizing your queries across multiple nodes, your application can scale & your queries are fast. Citus is available as open source and in the cloud, built into Azure Database for PostgreSQL.
-
Спасибо, посмотрю.
-
Всем привет!
Перелопатил все, потеряв надежду - иду сюда.
Проблема: не принимает соединения clickhouse (listen_host стоит для всех - ::)
Как служба - работает (active (exited)).
В логах (даже через интерактивный режим) - нет Error'ов.
Не принимает соединения ни на 8123 порт, ни на 9000. Из консоли получаю:
ClickHouse client version 21.2.5.5 (official build).
Connecting to 127.0.0.1:9000 as user default.
Code: 210. DB::NetException: Connection refused (127.0.0.1:9000)
В логах кристально чисто. Куда смотреть, подскажите, пожалуйста? -
Всем привет. Помогите советом по поиску потерянных записей.
Есть цепочка [SourceTable1, SourceTable2, ..., SourceTableN] -> [MV1, MV2, ..., MVN] -> Buffer -> DestinationAggTable.
В SourceTable обнаружились записи (несколько тысяч потерянных записей из 150млн успешно дошедших) двухдневной давности, которые не учтены в DestinationAggTable (сравнивал результаты запроса к DestinationAggTable c final и результаты запроса к исходной SourceTable).
Основной подозреваемый - Buffer. Правда, он копит по 16 х 500к записей, что сильно больше потерянного количества.
Второй подозреваемый - MV, но, насколько помню, если бы была ошибка в MV (какие-нибудь некорректные данные, которые нельзя вставить в буфер, например), то эта пачка и в исходную таблицу не вставилась бы.
Третий подозреваемый - собственно, DestinationAggTable. Из возможных ошибок могу нафантазировать только какие-нибудь ошибки мерджа или вставки, хотя такого ещё никогда не видел.
Вопрос: как можно проверить не было ли каких ошибок при вставке в буфер\записи из буфера? Или там перезагрузок? Если в файловых логах, то в каких?
Дело в том, что у меня нет доступа к файловой системе сервера, могу запросить логи через админов, но надо понять что запрашивать. -
selinux firewall
-
А если пробросить порт через ssh на локальную машину?
-
Как служба - работает (active (exited)).
вообще вроде явно говорит что он тупо вышел у тебя =)
/var/log/clickhouse-server/*.err.log смотрел? -
Фаерволл отключен, коннекты не проходят даже локально через clickhouse-client
-
Вот совсем пусто. Были ошибки запросов, но это отношения к делу не имеет
-
нет не так
ошибки в MV особенно если у вас цепочки MV
на исходную таблицу не влияют
MV это AFTER INSERT trigger который срабатывает на блок записей при INSERT в таблице которые прописан в SELECT .. FROM для MV -
идем на сервер clickhouse
curl -vvv http://127.0.0.1:8123/ping
что показывает?
ss -nltp | grep clickhouse
что показывает? -
а selinux стоит ?
-
curl: (7) Failed to connect to 127.0.0.1 port 8123: В соединении отказано
Вторая команда ничего не выводит. Сейчас кликхаус работает в интерактивном режиме, много подобных сообщений
Получается, он пытается стартануть, т.к. все еще не было сообщения о том, что он готов принимать соединения.
Вначале только <Information> Application: starting up. -
selinux не стоит
-
Всем спасибо! Данный поток длился очень долго, через службу кликхаус запуститься не мог. Помогло "ожидание", пока в интерактивном режиме не прошло около 2 часов
-
Предположим, что вот такая таблица:
CREATE TABLE data_set (instrument_id UUID, date Date, measurement Float64) ENGINE = MergeTree() PARTITION BY toYYYYMM(date) ORDER BY tuple()
Схема упрощённая, но для понимания проблемы подходит. Положить instrument_id в колонки я не смогу, так как заранее они неизвестны.
Теоретически можно посчитать ковариацию для пары массивов при помощи, например, SELECT covarSampArray([1, 2, 3], [1, 2, 6]). То есть последовательность измерений для одного инструмента я могу преобразовать в массив при помощи groupArray(measurement). Но как это всё вместе связать у меня пока что идей нет. -
ну сделайте grep -i listen /var/log/clickhouse-server
и
ss -nltp | grep 8123 -
в смысле у вас там данных чтобы было дофига и 2 часа click табличку грузил? или что?
-
Да, я много раз смотрел и читал то разъяснения Дениса, но с полгода назад я так потерял пару дней исходных данных (не помню только на 19.х или уже на 20.8), когда у меня набор полей в исходной таблице, MV и таблице назначения разъехался, из-за чего запрос в MV стал некорректным.
Специально потом не воспроизводил, но галочку себе поставил. -
Привет. Зависают DROP TABLE/DROP DATABASE запросы. Другие DDL (CREATE TABLE) работают.
В логах только такое вижу
DROP TABLE test.indicator_log
Query id: ce1f4cfb-2e09-42b8-90aa-8af21c100127
[clickhouse-dev] 2021.06.11 10:20:20.630424 [ 866325 ] {ce1f4cfb-2e09-42b8-90aa-8af21c100127} <Debug> executeQuery: (from 10.20.20.26:41502, using production parser) DROP TABLE test.indicator_log;
Timeout exceeded while receiving data from server. Waited for 300 seconds, timeout is 300 seconds.
Cancelling query.
Загрузка cpu нулевая, io тоже. В чём может быть дело? -
-
мне тоже интерестно использует ли кто-нобудь дбт с КХ, и если да, то какие впечатления?
-
Привет!
Подскажите, пожалуйста, что не так в синтаксисе этого запроса? Если я запускаю в DataGrip, то запрос выполняется, но если запускаю в ClickHouse консоле, то мне говорит
🙂 LEFT JOIN results_courselessonsummary AS summary ON cll.id = summary.clesson_id
ORDER BY solving_time DESC
;:-]ORDER BY solving_time DESC
;
Syntax error: failed at position 1 ('LEFT') (line 1, col 1):
LEFT JOIN results_courselessonsummary AS summary ON cll.id = summary.clesson_id
ORDER BY solving_time DESC
Expected one of: Query, CREATE, ATTACH, USE, <…>
Сам запрос:
```
SELECT cll.id,
lesson_id,
solving_time,
dateDiff(
'second',
date_assignment,
toDateTime(parseDateTimeBestEffortOrZero(summary.date_created, 6, 'Europe/Moscow'))
) AS first_attempt_time
FROM
(
SELECT id,
lesson_id,
toDateTime(parseDateTimeBestEffortOrZero(date_assignment, 6, 'Europe/Moscow')) as date_assignment,
dateDiff(
'second',
date_assignment,
toDateTime(parseDateTimeBestEffortOrZero(date_finished_by_students, 6, 'Europe/Moscow'))
) AS solving_time
FROM courses_courselessonlink
WHERE date_assignment IS NOT NULL
AND date_finished_by_students IS NOT NULL
) AS cll
LEFT JOIN results_courselessonsummary AS summary ON cll.id = summary.clesson_id
ORDER BY solving_time DESC
;
``` -
-
вроде должно что-то сломаться, если добавить столбец, то не должно ломаться, если сменить тип, то очевидно, что не сможет поехать
-
у вас многострочный запрос?
--multiline ? -
многострочный, да
-
а как это включить в консоле :)?
-
подключиться со флагом —multiline ?
-
-
ммм, сейчас попробую.
-
да, получилось! Спасибо!
-
Всем привет!
Не могу разобраться что не так с подпиской на rabbit, создаю таблицы запросом:
create table attempts
(
project_id Int64,
vendor_id Int64,
created_at DateTime(6, 'UTC')
)
engine = MergeTree ORDER BY project_id;
create table attempts_queue
(
project_id Int64,
vendor_id Int64,
created_at DateTime(6, 'UTC')
)
engine = RabbitMQ
SETTINGS
rabbitmq_host_port = 'rabbitmq.loc:5672',
rabbitmq_exchange_name = 'clickhouse',
rabbitmq_exchange_type = 'direct',
rabbitmq_format = 'JSONEachRow',
rabbitmq_queue_base = 'clickhouse_attempts',
rabbitmq_routing_key_list = 'clickhouse_clickhouse_attempts',
rabbitmq_num_consumers = 1;
CREATE MATERIALIZED VIEW attempts_consumer TO attempts AS select * from attempts_queue;
но консьмер не появляется, при этом при выполнении запроса
select * from attempts_queue
данные я получаю -
нет такого в version 19.16.19.85 (official build)
только обновляться и юзать? в зукипере опасно удалить путь до каждой выведенной реплики `/clickhouse/{shard}/{table}/replicas/{replica} - или это не поможет? -
Ну руками удалить путь можно
-
19.16 не поддерживается от слова вообще
лучше обновляться -
понял. спасибо за помощь!
-
как сделать ReplacingMergeTree на все колонки?
-
в replacingMT есть 3 типа колонок:
1. те, что в ORDER BY — ключи дедупликации
2. опциональный version (не мб в ORDER BY) — отвечает за выбор строки (если нет, то остается последняя по вставке строка)
3. остальные — значения дедуплицируются
что вы хотите получить? -
Дедупликацию дубликатов по всем колонкам таблицы (п1)
-
проверил руками. Делал DETACH, менял столбцы (переименовал, добавлял, удалял по 1 столбцу за раз). ATTACH в обратную сторону отрабатывает без проблем. Да, удалённый столбец не начинает быть видимым и, думается мне, его данные будут вычищены вместе с последующим OPTIMIZE. Переименованая колонка также остаётся пустой после ATTACH.
-
можно последним значением в ORDER BY добавить cityHash(*);
-
простой ответ: запихивайте все столбцы в order by
чуть более правильный ответ: не надо запихивать все столбцы в order by
кейс заключается в том, что вы пишете полные дубликаты и хотите от них избавляться? -
Да
-
о, прикольно
-
Подскажите, а какой движок БД используется у базы по-умолчанию? Или как посмотреть какой дижок у БД?
-
atomic в последних версиях, в ранних ordinary, емнип
-
В мануале написано "По умолчанию ClickHouse использует движок Atomic", но у меня не работает exchange tables. Версия 21.4.
-
Но я апгрейдил его с более ранних версий.
-
пора уже закопать стюардессу :)
-
никого не слушайте, юзайте кликхайс, но на вашем месте я бы подождал релиза MaterializePostgreSQL, собственно я сам и жду :)
-
А почему вы говорите это мне, а не топикстартеру?
-
при апгрейде, старая база осталась в Engine=Ordinary
-
select * from system.databases;
-
всё равно ничерта не понятно :) и боюсь, что не только мне одному.
у вас есть таблицаdata_set с каким-то неизвестным полем instrument_id и вы хотите применить к нему несуществующую функцию covarSampArray.
я очень сомневаюсь, что кто-то сможет разобраться в этой каше.
вы изначально задавали вопрос:
>как вытянуть данные для функций типа covarPop/corr, если эти данные хранятся в строках, а не в столбцах?
вот и акцентируйте внимание на том в каком виде у вас лежат ланные, а потом, что их нужно привести к формату func(x, y). мне сдаётся, что у вас элементарная проблема, но вы не можете её внятно описать. как говорится "правильно заданный вопрос - уже половина ответа".
в этом чатике помогали решить проблемы посложнее "перевода столбцов в колонки".
если тыкать пальце в небо, то вам для конвертации строк в столбцы вам нужны функции arrayJoin и arrayMap, можете поискать их использование в этом чатике, с их помощью можно творить чудеса конвертации -
никого не слушайте, юзайте кликхайс, но на вашем месте я бы подождал релиза MaterializePostgreSQL, собственно я сам и жду :)
-
спасибо. исправился
-
Есть запро по типу:
Возвращает к примеру 7
select count() from tab1 as t1
left join tab2 as t2 final
on t1.id = t2.id
вернет 4
select count() from tab1 as t1
left join (select * from tab2 final) as t2
on t1.id = t2.id
Почему при джойне final не срабатывает в 1 примере? -
Да, MaterializePostgreSQL был бы то, что надо. К счастью, особой спешки у меня нет, так что можно и подождать. А пока делаю очередной подход к https://github.com/long2ice/synch , но что-то он не хочет работать с postgres, то одни ошибки, то другие, то третьи...GitHub - long2ice/synch: Sync data from the other DB to ClickHouse(cluster)
Sync data from the other DB to ClickHouse(cluster) - GitHub - long2ice/synch: Sync data from the other DB to ClickHouse(cluster)
-
а должен?
-
В моем понимании да,если не сложно,могли бы объяснить?
-
ну вот я поменял, но после рестарта кликхаус не стартует
-
ну точнее как, он стартует, соединения не принимает, что-то делает там, и потом в crashloop уходит из-за того что хелсчеки не прошли
-
какая версия?
https://github.com/ClickHouse/ClickHouse/issues/16808FINAL modifier does not work on right table of the JOIN · Issue #16808 · ClickHouse/ClickHouseDescribe the bug FINAL modifier does not work on right table of the JOIN How to reproduce 20.3, 20.8 confirmed. drop table if exists default.test; create table default.test( pk UInt64, a01 Int64, a...
-
если вам сейчас нужно "поиграться" с целью изучения, а не продакшен версия, то можете скачать репозиторий, вмёржить указанный выше пулреквест и по инструкции собрать из исходников то что вам нужно уже сейчас. а когда выйдет официальная версия с поддержкой MaterializePostgreSQL, то просто обновиться на неё. это на слуйчай если с другими способами совсем никак не сложится
-
Как вариант, да, спасибо за подсказку.
-
SELECT version()
21.6.3.14 -
Я, если честно, не понимаю, что в моём вопросе такого архинепонятного и где там каша. Объясняю ещё раз.
covarSamp/corr/etc. очень легко использовать, когда данные лежат в колонках:
create table columnar_data_set(column_a Float64, column_b Float64) engine = Memory();
insert into columnar_data_set values (1, 1), (2, 2), (3, 6);
select * from columnar_data_set format PrettySpace;
column_a column_b
1 1
2 2
3 6
select covarSamp(column_a, column_b) from columnar_data_set format PrettySpace;
covarSamp(column_a, column_b)
2.5
Как мне сделать то же самое, когда все данные находятся в одной колонке, но два диапазона можно определить по ключу?
create table data_set(column_name String, measurement Float64) engine = Memory();
insert into data_set values ('column_a', 1), ('column_a', 2), ('column_a', 3), ('column_b', 1), ('column_b', 2), ('column_b', 6);
select * from data_set format PrettySpace;
column_name measurement
column_a 1
column_a 2
column_a 3
column_b 1
column_b 2
column_b 6 -
И насчёт " вы хотите применить к нему несуществующую функцию covarSampArray.". Существует такая функция. https://clickhouse.tech/docs/en/sql-reference/aggregate-functions/combinators/#agg-functions-combinator-array комбинатор просто сверху лежит.Combinators | ClickHouse Documentation
Aggregate Function Combinators The name of an aggregate function can have a suffix appended to it. This changes the way
-
Мне надо как-то вот эти последовательности "1, 2, 3" и "1, 2, 6" скормить как аргументы в covarSamp или corr, не суть важно, какая там функция.
-
FINAL не поддерживается для JOIN. Запрос отрабатывает игнорируя FINAL, датагрид сразу подчёркивает слово FINAL в вашем запросе.
https://github.com/ClickHouse/ClickHouse/issues/8655JOINs with FINAL keyword · Issue #8655 · ClickHouse/ClickHouseWhen joining with a table, the keyword final does not function as should. Woraround: when you create a view with the FINAL and in the SQL you join to that view, the join works fine, however, this i...
-
логи смотрите в kubectl logs -f ... —since=1h
там написано что он делает после загрузки -
Ну какие-то mutations, удаляет что-то, как будто все нормально
-
А потом странная information: application received terminate signal или что-то такое проскакивает,
-
Но в том то и проблема, что нету явной ошибки
-
-
-
SELECT covarSamp(a,b) FROM (
select groupArrayIf(measurement, column_name = 'column_a') as a,
groupArrayIf(measurement, column_name = 'column_b') as b
from data_set
)
ARRAY JOIN a, b;
2.5 -
toStartOfFifteenMinutes(date)
-
-
-
тут в чатике даже по 3 минуты группировали:
https://t.me/clickhouse_ru/116450
поиском можно найти всё что угодно, тут уже миллион вопросов был :)Denny Crane [Junior support specialist at Altinity (NB,Canada)] in ClickHouse не тормозитhttps://clickhouse.yandex/docs/en/query_language/functions/date_time_functions/#tostartofinterval-time-or-data-interval-x-unit-time-zone SELECT min(value), max(value), metric, toStartOfInterval(timestamp, INTERVAL 3 minute) xxx FROM valued GROUP BY metric, xxx
-
Каждые 15 мин) 0 - 14.59; 15 - 29.59 и тд
А в ответе будет 0, 15, 30, 45, вроде -
-
Ага, спасибо! Можно также что-то такое:
select covarSampArray(a, b) from (select groupArrayIf(measurement, column_name = 'column_a') a, groupArrayIf(measurement, column_name = 'column_b') b from data_set);
Будет такой же результат. А есть какой-либо способ с использованием возможностей базы это сделать для заданной пользователем последовательности пар колонок? :) То есть если на входе что-то вроде [('column_a', 'column_b'), ('column_c', 'column_d')]? Можно это всё, конечно, через UNION склеить, но может есть более изящный способ? -
CREATE table visits_place_sum (
placeid text,
mode text,
algo text,
points AggregateFunction(sum, double),
created DateTime64,
) ENGINE = AggregatingMergeTree() Partition by (placeid)
Order by (placeid,mode,algo);
CREATE MATERIALIZED VIEW visits_place_sum_mv
to visits_place_sum
AS SELECT
placeid,
mode,
algo,
sumState(points) points,
toStartOfFifteenMinutes(created) as created
FROM visits
GROUP BY placeid, mode,algo, created; -
-
-
ну тогда может опять сломали...
пишите тикет и связывайте Т.Т -
что-то я вас опять не понимаю :) напишите что ли пример с union чтобы я мог понять в каком виде вы ожидаете результат
-
@BloodJazMan а сейчас вообще похоже логи новые не появлятся. такое ощущение что он просто не стартует (pod стартует, но сам сервер упирается гдето)
-
ну под просто так не может "не стартовать". под в stdout как минимум логи пишет...
-
Ну странно, но нет)
-
k9s поставьте к кластеру подключитесь посмотрите
-
Пустота в kubectl logs
-
полную команду покажите?
-
kubectl -n clickhouse logs -f chi-main-0-0-0 clickhouse --since 1h
-
-
Что-то вот такое:
select
('column_a', 'column_b') pair, covarSampArray(x, y) as covar
from
(
select
groupArrayIf(measurement, column_name = 'column_a') x,
groupArrayIf(measurement, column_name = 'column_b') y
from data_set
)
union all select
('column_c', 'column_d') pair, covarSampArray(x, y) as covar
from
(
select
groupArrayIf(measurement, column_name = 'column_c') x,
groupArrayIf(measurement, column_name = 'column_d') y
from data_set
)В тестовом примере данных для c и d нет, но предположим, что там что-то есть. Последовательность действий для каждой пары ключей получается абсолютно одинаковой, как видите. -
kubectl describe chi main -n clickhouse
покажите Events -
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned clickhouse/chi-risk-aggregator-main-0-0-0 to k8s-highpri-20631152-vmss000004
Normal Started 8m3s kubelet, k8s-highpri-20631152-vmss000004 Started container clickhouse-log
Normal Created 8m3s kubelet, k8s-highpri-20631152-vmss000004 Created container clickhouse-log
Normal Pulled 8m3s kubelet, k8s-highpri-20631152-vmss000004 Successfully pulled image "busybox"
Normal Pulled 8m3s kubelet, k8s-highpri-20631152-vmss000004 Container image "alexakulov/clickhouse-backup:0.6.4" already present on machine
Normal Created 8m3s kubelet, k8s-highpri-20631152-vmss000004 Created container clickhouse-backup
Normal Pulling 8m3s kubelet, k8s-highpri-20631152-vmss000004 Pulling image "busybox"
Normal Started 8m3s kubelet, k8s-highpri-20631152-vmss000004 Started container clickhouse-backup
Normal Killing 6m36s kubelet, k8s-highpri-20631152-vmss000004 Container clickhouse failed liveness probe, will be restarted
Normal Pulled 6m6s (x2 over 8m4s) kubelet, k8s-highpri-20631152-vmss000004 Container image "yandex/clickhouse-server:20.8.13.15" already present on machine
Normal Started 6m5s (x2 over 8m3s) kubelet, k8s-highpri-20631152-vmss000004 Started container clickhouse
Normal Created 6m5s (x2 over 8m4s) kubelet, k8s-highpri-20631152-vmss000004 Created container clickhouse
Warning Unhealthy 3m3s (x21 over 7m3s) kubelet, k8s-highpri-20631152-vmss000004 Liveness probe failed: Get http://10.240.4.170:8123/ping: dial tcp 10.240.4.170:8123: connect: connection refused -
это describe pod
я про describe chi -
сори,
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Info UpdateCompleted 26m clickhouse-operator Update Service clickhouse/clickhouse-risk-aggregator
Info ReconcileStarted 26m clickhouse-operator Reconcile Host 0-0 started
Info CreateStarted 26m clickhouse-operator Update StatefulSet(clickhouse/chi-risk-aggregator-main-0-0) - started
Info UpdateCompleted 26m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-deploy-confd-main-0-0
Info UpdateCompleted 26m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-usersd
Info ReconcileStarted 26m clickhouse-operator reconcile started
Info UpdateCompleted 26m clickhouse-operator Update StatefulSet(clickhouse/chi-risk-aggregator-main-0-0) - completed
Info UpdateCompleted 26m clickhouse-operator Update Service clickhouse/chi-risk-aggregator-main-0-0
Info CreateStarted 26m clickhouse-operator Adding tables on shard/host:0/0 cluster:main
Info ReconcileCompleted 26m clickhouse-operator Reconcile Host 0-0 completed
Info UpdateCompleted 26m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-configd
Info ReconcileInProgress 26m clickhouse-operator remove items scheduled for deletion
Info ReconcileInProgress 26m clickhouse-operator remove items scheduled for deletion
Info UpdateCompleted 26m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-configd
Info ReconcileInProgress 26m clickhouse-operator add CHI to monitoring
Info ReconcileCompleted 26m clickhouse-operator reconcile completed
Info UpdateCompleted 22m clickhouse-operator Update Service clickhouse/clickhouse-risk-aggregator
Info UpdateCompleted 22m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-usersd
Info ReconcileStarted 22m clickhouse-operator reconcile started
Info ReconcileStarted 22m clickhouse-operator Reconcile Host 0-0 started
Info UpdateCompleted 22m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-deploy-confd-main-0-0
Info UpdateCompleted 22m clickhouse-operator Update Service clickhouse/chi-risk-aggregator-main-0-0
Info UpdateCompleted 22m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-configd
Info UpdateCompleted 22m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-configd
Info ReconcileCompleted 22m clickhouse-operator Reconcile Host 0-0 completed
Info ReconcileInProgress 22m clickhouse-operator remove items scheduled for deletion
Info ReconcileInProgress 22m clickhouse-operator add CHI to monitoring
Info ReconcileCompleted 22m clickhouse-operator reconcile completed
Info ReconcileInProgress 22m clickhouse-operator remove items scheduled for deletion
Info ReconcileStarted 10m clickhouse-operator reconcile started
Info UpdateCompleted 10m clickhouse-operator Update Service clickhouse/clickhouse-risk-aggregator
Info UpdateCompleted 10m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-deploy-confd-main-0-0
Info ReconcileStarted 10m clickhouse-operator Reconcile Host 0-0 started
Info UpdateCompleted 10m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-usersd
Info CreateStarted 10m clickhouse-operator Update StatefulSet(clickhouse/chi-risk-aggregator-main-0-0) - started
Info UpdateCompleted 10m clickhouse-operator Update StatefulSet(clickhouse/chi-risk-aggregator-main-0-0) - completed
Info CreateStarted 10m clickhouse-operator Adding tables on shard/host:0/0 cluster:main
Info UpdateCompleted 10m clickhouse-operator Update Service clickhouse/chi-risk-aggregator-main-0-0 -
Info UpdateCompleted 10m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-configd
Info ReconcileCompleted 10m clickhouse-operator Reconcile Host 0-0 completed
Info UpdateCompleted 10m clickhouse-operator Update ConfigMap clickhouse/chi-risk-aggregator-common-configd
Info ReconcileInProgress 10m clickhouse-operator add CHI to monitoring
Info ReconcileInProgress 10m clickhouse-operator remove items scheduled for deletion
Info ReconcileInProgress 10m clickhouse-operator remove items scheduled for deletion
Info ReconcileCompleted 10m clickhouse-operator reconcile completed -
у вас pod от chi-main
а describe вы сделали для chi-disk-aggreagator -
да, это я так, стер, думал завуалировать, но потом забил)
-
это один и тот же кластер
-
как вы правили настройки?
через правку манифеста kind: ClickHouseInstallation или тупо файл меняли внутри пода? -
apiVersion: "clickhouse.altinity.com/v1"
kind: "ClickHouseInstallation"
metadata:
name: risk-aggregator
spec:
defaults:
templates:
dataVolumeClaimTemplate: data-volume-template
logVolumeClaimTemplate: log-volume-template
configuration:
settings:
max_table_size_to_drop: 0
disable_internal_dns_cache: 1 -
через манифест
-
data-volume-template у вас в spec.templates.volumeClaimTemplates описаны? или отдельно через kind: ClickhouseInstallationTemplate заданы?
-
это весь манифест?
-
ну оно работало прекрасно с этим манифестом, а вот после рестарта что-то пошло не так
-
дальше, да
volumeClaimTemplates:
- name: data-volume-template
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{.Values.clickhouse.diskSize}}
- name: log-volume-template
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{.Values.clickhouse.logDiskSize}} -
нет, весь скинуть?
-
clusters секцию
1 реплика. 1 шард? -
да,
clusters:
- name: "main"
templates:
podTemplate: pod-template-with-volumes
layout:
shardsCount: {{.Values.clickhouse.shardsCount}}
replicasCount: {{.Values.clickhouse.replicasCount}}
values.yml
clickhouse:
replicasCount: 1
shardsCount: 1 -
Info ReconcileInProgress 10m clickhouse-operator add CHI to monitoring
Info ReconcileInProgress 10m clickhouse-operator remove items scheduled for deletion
Info ReconcileInProgress 10m clickhouse-operator remove items scheduled for deletion
Info ReconcileCompleted 10m clickhouse-operator reconcile completed
значит kubernetes развернул хост и получил что statefulset в ready
kubectl get sts -n clickhouse -o wide
что показывает? -
kubectl get sts -n clickhouse -o wide
NAME READY AGE CONTAINERS IMAGES
chi-risk-aggregator-main-0-0 0/1 85d clickhouse,clickhouse-backup,clickhouse-log yandex/clickhouse-server:20.8.13.15,alexakulov/clickhouse-backup:0.6.4,busybox -
ну он в ready, запустил pod, а тот скрашился чуть позже
-
получается как-то так
-
Данных много было?
есть сильное подозрение что там на старте много system.parts много читается -
и он вообще не потребляет cpu, mem когда стартует
-
данных больше терабайта было
-
а без сервера можно проверить? по файлам
-
kubectl get chi -n clickhouse risk-management -o yaml весь расшарьте можно в личку
-
данные в PVC лежат
-
kubernetes чей? AWS ? bare metal?
CSI драйвер какой ? EBS? -
какая версия clickhouse-operator? 0.14? или ниже?
-
15 минут, пожалуйста, сча вернусь, извиняюсь
-
скинул
-
ну пока он пару минут висит могу глянуть в файлы
-
Azure, ну да у них свой EBS да
-
0.13.5
-
-
SELECT x, covarSampArray(a, b)
FROM (
SELECT x,
groupArrayIf(measurement, column_name = x.1) a,
groupArrayIf(measurement, column_name = x.2) b
FROM data_set
ARRAY JOIN [('column_a', 'column_b'), ('column_c', 'column_d')] as x
GROUP BY x
)
GROUP BY x; -
Спасибо!
-
здрасьте. мы пытаемся данные починить.
после этого "корнер кейса" есть строки в обеих репликах и есть строки частично в одной реплике и есть частично в другой...
есть ли что-то оптимальней нижеследующего решения?
for each partition:
create tmp (with same partitioning and order by)
insert to tmp on host1 table from host2 corrupt table specific partition
insert to tmp on host1 table from host1 corrupt table specific partition with where (not in by unique keys)
drop partition from corrupt table (both replicas)
detach partition from tmp
attach to corrupt table -
-
ошибка то какая? и код какой?
и версия последняя библиотеки? -
в доке написано, что он не работает с http/https: https://clickhouse-driver.readthedocs.io/en/latest
-
Коллеги, можете помочь решить проблему с таблицей?
Таблица ClickHouse zqos.quality_of_service_1_CT находится в странном состоянии
SELECT count() FROM system.tables WHERE database='zqos' AND name='quality_of_service_1_CT’
возвращает count=1, т.е. таблица есть
а любое обращение к ней
select count(*) from zqos.quality_of_service_1_CT;
или
DROP TABLE IF EXISTS zqos.quality_of_service_1_CT
возвращает ошибку, таблица удалена
Code: 218, e.displayText() = DB::Exception: Table is dropped, e.what() = DB::Exception -
Не знаю ответили ли вам, но будут дефолты, но можно включить null. Настройка Join use nulls
-
в system.merges есть что то с ней?
-
нет, select * from system.merges where database ='zqos' ничего не возвращает
-
залочилось, видимо.
-
как побороть блокировку?
-
честно не знаю(
если тестовая среда, я бы перезапустил сервер и посмотрел
если прод, то мб появятся мысли получше) -
перезапуск точно не поможет
-
-
-
-
-
тяжелый случай
-
у нас недавно вообще весело было, докер был ранее, и он перестал управлять контейнерами, они запускались, стояло сделать спарк джобу что делала отчёт - и привет, докер считал что контейнеров уже нет, перевели на подман, стало что-то снова работать
-
спасибо
-
как я и говорил, скорее всего придётся ждать понедельника
-
Хрыч, какие контейнеры в финке?
-
Какая версия?
-
1.1.54385
-
Оу, ну окей.
sql файл в папке бд в метадате существует? -
надо завтра смотреть будет, но вообще ничего не удалялось
-
Ну а так я бы попробовал мб ее обратно приаттачить.
ATTACH TABLE xx.xxx;
А вообще судя по проблеме рестарт должен помочь. кмк -
Вообще 1.1.5 звучит как версия в которой может быть дедлок
-
-
"поправили" это только в 19.14
-
-
Ну я к тому, что скорее всего в предыдущих версиях этот дедлок был.
-
А строки, которые только на одной из реплик существуют, не в отдельных партах случайно?
Какая версия у вас? -
#вакансия #удаленка #dba #clickhouse
ищем крутого dba. clickhouse или с желанием изучить. зарплата от 180 обсуждаемая. Любой город, можно в офисе(мск сити), если хочется. тк рф, дмс, все дела. ищем активных и целеустремленных :-) по вопросам в лс -
21.3
Они криво перемерджены на разных репликах -
ну тогда да, вашим планом
-
доброй ночи!
подскажите пожалуйста, как лучше сделать следующее - есть массив массивов произвольной длинны, его нужно объединить в одномерный массив
[[a], [b], [c, d, e]] -> [a, b, c, d,e] -
Вот тут есть функция для этого https://clickhouse.tech/docs/ru/sql-reference/functions/array-functions/Массивы | Документация ClickHouse
Массивы empty Проверяет, является ли входной массив пустым. Синтаксис empty([x]) Массив считается пустым, если он не сод
-
arrayFlatten, спасибо!!
-
:)
-
Спасибо) к этому моменту уже нашел, а как можно проверить, существуют ли записи в джоин таблице без этой настройки?
- 12 June 2021 (6 messages)
-
-
ОЧЕНЬ затратно
это не UPDATE
это мутации
которые происходят при слиянии партов или самостоятельно триггерят перечитывание всего парта и используют отдельный thread pool
то есть для обновления 1й строки читается и пишется сотни тысяч строк -
это имеет смысл и используется только тогда, когда надо в фоне удалить достаточно большое кол-во записей
или когда удалять надо не часто (десятки, максимум сотни запросов в день) -
-
Добрый день.
Может кто-нибудь сталкивался с проблемой. Уже не знаю куда копать.
Два одинаковых сервера в одной стойке + zookeeper. На один сервер идет чтение и запись (192.168.10.1). На другой - только репликация данных (192.168.10.2). Load average<2 на обоих серверах. Сеть тоже не перегружена.
ClickHouse server version 20.8.3.18.
На 192.168.10.2 возникают несколько раз в день ошибки в логе:
2021.06.12 17:30:16.248490 [ 30922 ] {} <Error> col.logs_geo_traffic: DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Poco::Excep
tion. Code: 1000, e.code() = 0, e.displayText() = Timeout: connect timed out: 192.168.10.1:9009, Stack trace (when copying this message, always include the lines below):
0. Poco::TimeoutException::TimeoutException(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_tra
its<char>, std::__1::allocator<char> > const&, int) @ 0x13cd67fb in /usr/bin/clickhouse
1. ? @ 0xa1a9951 in /usr/bin/clickhouse
2. Poco::Net::HTTPSession::connect(Poco::Net::SocketAddress const&) @ 0x13be6921 in /usr/bin/clickhouse
3. Poco::Net::HTTPClientSession::reconnect() @ 0x13bdd3da in /usr/bin/clickhouse
4. Poco::Net::HTTPClientSession::sendRequest(Poco::Net::HTTPRequest&) @ 0x13bde5a0 in /usr/bin/clickhouse
5. DB::detail::ReadWriteBufferFromHTTPBase<std::__1::shared_ptr<DB::UpdatablePooledSession> >::call(Poco::URI, Poco::Net::HTTPResponse&) @ 0x1105feee in /usr/bin/clickhouse
6. DB::detail::ReadWriteBufferFromHTTPBase<std::__1::shared_ptr<DB::UpdatablePooledSession> >::ReadWriteBufferFromHTTPBase(std::__1::shared_ptr<DB::UpdatablePooledSession>, Poco::URI, s
td::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (std::__1::basic_ostream<char, std::__1::char_traits<char> >&)>, Poc
o::Net::HTTPBasicCredentials const&, unsigned long, std::__1::vector<std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::bas
ic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::alloc
ator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >, DB::RemoteHostFilter const&) @ 0x11060382 in /usr/bin/clickhouse
7. DB::DataPartsExchange::Fetcher::fetchPart(std::__1::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocato
r<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::alloc
ator<char> > const&, int, DB::ConnectionTimeouts const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::
__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, std::__1::basic_string<ch
ar, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x1105a30f in /usr/bin/clickhouse
8. ? @ 0x10f9d1de in /usr/bin/clickhouse
9. DB::StorageReplicatedMergeTree::fetchPart(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::StorageInMemoryMetada
ta const> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, unsigned long, std::__1::shared_ptr<zkutil::ZooKeeper>) @ 0x10fe52e
1 in /usr/bin/clickhouse
10. DB::StorageReplicatedMergeTree::executeFetch(DB::ReplicatedMergeTreeLogEntry&) @ 0x10fe75a4 in /usr/bin/clickhouse
11. DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry&) @ 0x10fe9951 in /usr/bin/clickhouse
12. ? @ 0x10fe9cca in /usr/bin/clickhouse -
13. DB::ReplicatedMergeTreeQueue::processEntry(std::__1::function<std::__1::shared_ptr<zkutil::ZooKeeper> ()>, std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::__1::function
<bool (std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>) @ 0x111ba57e in /usr/bin/clickhouse
14. DB::StorageReplicatedMergeTree::queueTask() @ 0x10f9ea57 in /usr/bin/clickhouse
15. DB::BackgroundProcessingPool::workLoopFunc() @ 0x11055b0f in /usr/bin/clickhouse
16. ? @ 0x110563ef in /usr/bin/clickhouse
17. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xa43cc4d in /usr/bin/clickhouse
18. ? @ 0xa43b3ff in /usr/bin/clickhouse
19. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
20. clone @ 0xfe8dd in /usr/lib64/libc-2.17.so
(version 20.8.3.18)
В ошибке непонятно какая величина таймаута была превышена.
Судя по порту - это параметр <interserver_http_port>9009</interserver_http_port>, т.е. межсерверный обмен.
Судя по коду (https://github.com/ClickHouse/ClickHouse/blob/20.8/programs/server/Server.cpp#L951) таймауты задаются в settings.http_receive_timeout и settings.http_send_timeout.
Если я правильно понял, то в config.xml задается <system_profile>default</system_profile>, а в users.xml в профиле default - задаются эти параметры. Сейчас они стоят 3600 секунд.
Что может быть не так?ClickHouse/Server.cpp at 20.8 · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
- 13 June 2021 (28 messages)
-
Добрый день! Столкнулся с такой проблемой, не могу запустить кликхаус, в логах ошибки нет как и надписи shutdown, при записи ps -ef|grep clickhouse, процессы отсутствуют. Последние логи: 2021.06.13 07:30:24.130366 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013624 is not done yet because 7672 parts to mutate suddenly appeared.
2021.06.13 07:30:24.131575 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013625 is not done yet because 7673 parts to mutate suddenly appeared.
2021.06.13 07:30:24.132782 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013626 is not done yet because 7673 parts to mutate suddenly appeared.
2021.06.13 07:30:24.133993 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013627 is not done yet because 7674 parts to mutate suddenly appeared.
2021.06.13 07:30:24.135242 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013628 is not done yet because 7674 parts to mutate suddenly appeared.
2021.06.13 07:30:24.136465 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013629 is not done yet because 7675 parts to mutate suddenly appeared.
2021.06.13 07:30:24.137675 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013630 is not done yet because 7675 parts to mutate suddenly appeared.
2021.06.13 07:30:24.138888 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013631 is not done yet because 7676 parts to mutate suddenly appeared.
2021.06.13 07:30:24.140100 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013632 is not done yet because 7676 parts to mutate suddenly appeared.
2021.06.13 07:30:24.141317 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013633 is not done yet because 7677 parts to mutate suddenly appeared.
2021.06.13 07:30:24.142527 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013634 is not done yet because 7677 parts to mutate suddenly appeared.
2021.06.13 07:30:24.143752 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013635 is not done yet because 7678 parts to mutate suddenly appeared.
2021.06.13 07:30:24.144967 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013636 is not done yet because 7678 parts to mutate suddenly appeared.
2021.06.13 07:30:24.146180 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013637 is not done yet because 7679 parts to mutate suddenly appeared.
2021.06.13 07:30:24.147395 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013638 is not done yet because 7679 parts to mutate suddenly appeared.
2021.06.13 07:30:24.148605 [ 3814 ] {} <Trace> (ReplicatedMergeTreeQueue): Mutation 0000013639 is not done yet because 7680 parts to mutate suddenly appeared. -
-
кликхаус явно пытается сделать мутацию но ему чтото мешает. или объем очень велик. проверьте есть ли место на дисках
-
ну да =)
в мускуле нет такого понятия как immutable data parts
ему надо бегать по всей таблице которая динамически переписывается...
и в мускуле вообще нет асинхронных операций... что правильно -
ну вы запустили ВАГОН 13 тысяч ... мутаций и ребутнули сервер???
вы не понимаете как работают миграции... =)
куча мутаций не завершилась потому что внезапно появились парт которые подходят по условию мутации?
7680 parts to mutate suddenly appeared
ну сами мутации это просто текстовые файлы...
их по идее можно удалить если сервер выключен
но вы не получите не консистентное состояние БД
ищите в /var/lib/clickhouse/
txt файлы с вашими мутациями -
Добрый день. Подскажите как запустить два кластера Clickhouse на том же Zookeeper
-
Выбрать разные пути для таблиц с репликацией. Либо прописывать разный корень (root), но он тогда в ЗК должен быть.
-
Если цель была обновить всю таблицу, тогда конечно ClickHouse это может сделать эффективнее, причем я полагаю, что Вы обновляли одну-две колонки из десятков или сотен, и при ALTER UPDATE, насколько мне известно, ClickHouse перестраивает только изменившиеся колонки, так что на самом деле работы ClickHouse сделал намного меньше. Ну и он это умеет делать параллельно, в отличие от MySQL.
Для обновления одной строки (особенно целиком) всё будет наоборот. -
Спасибо А. П )
-
А какой самый чёткий способ raw данные из mergeTree перекладывать в таблицу aggregating по часам?
-
materialized view
-
А чтобы альтерить raw таблицу без потери данных во вьюхе?
-
только если строка быстро находится по primary key
тогда да, быстро -
а что мешает то? вьюха это триггер она данных сама по себе не содержит
если вы добавили поле в таблицу пересоздайте в этой же миграции MATERIALIZED VIEW
все новые INSERT после замены MATERIALIZED VIEW
пойдут с новой структурой... -
А все старые переливать, терабайты данных
-
ну если вам надо старых данных в aggregating merge tree положить...
выбирайте по диапозонам
INSERT INTO ... SELECT ... WHERE условия диапозона GROUP BY ... -
Сейчас так и делаем, понял, это норма)
-
ну да, можете просто этот INSERT INTO ... SELECT в cron положить... и сделать условие выборки только по новым данным ...
-
Если при создании мат вью указывать TO, то данные будут сохранятся в указанной таблице и тогда при пересоздании матвью никакие данные никуда переливать не надо.
-
Спасибо, почитаю
-
да, что-то совсем грустно всё с ClickHouse у меня на FreeBSD. Разные версии уже попробовал последнего года собрать - одинаково везде. С зависимостью, разве что от нагрузки, но и то не однозначно - иногда при хорошей может и несколько дней проработать, а иногда и часа не получается
-
<Fatal> BaseDaemon: ########################################
<Fatal> BaseDaemon: (version 21.3.13.1, no build id) (from thread 947139) (no query) Received signal Segmentation fault (11)
<Fatal> BaseDaemon: Address: 0x818891000 Attempted access has violated the permissions assigned to the memory area.
<Fatal> BaseDaemon: Stack trace: 0x57d5d0d 0x59053b0 0x80cf13e0e 0x80cf133cf
<Fatal> BaseDaemon: 0. 0x57d5d0d
<Fatal> BaseDaemon: 1. 0x59053b0
<Fatal> BaseDaemon: 2. 0x80cf13e0e
<Fatal> BaseDaemon: 3. 0x80cf133cf -
-
-
-
-
-
- 14 June 2021 (105 messages)
-
А из pkg - тоже валится?
-
Из pkg не пробовал. Но думаю также будет - какая ж разница. pkg таким же образом из порта этого же собирается
-
Но в пэкеджи мантейнер может собрать учитывая какие то нюансы
-
ну да, какой нибудь другой набор опций cmake
-
Привет, коллеги. Кликхаус нормально обновляется/откатывается? Есть подводные камни?
-
тестриуйте сначала весь свой функционал. есть изменения несовместимые
минорные версии обычно нормально обновляются -
#вакансия #удаленка #dba #clickhouse
ищем крутого dba. clickhouse или с желанием изучить. зарплата от 180 обсуждаемая. Любой город, можно в офисе(мск сити), если хочется. тк рф, дмс, все дела. ищем активных и целеустремленных :-) по вопросам в лс -
или gmake, или куча других нюансов
-
-
Да нет там никаких нюансов. Пакеты ровно из порта собираются. И опций там кофигурируемых в порте нет, кроме одной - добавлять доки+тесты или нет
-
да, это просто два триггера AFTER INSERT
которым передастя на обработку один и тот же блок данных которые Engine Kafka вычитала... -
принял
спасибо -
Удивительно, как скамеры даже не могут нормально ссылку в твиттере отформатировать, чтобы она хотя бы выглядела, как настоящая ссылка, а не фотошоп с другим шрифтом.
-
-
всем привет, недавно обновили КХ до последней stable верси, до этого сидели на 19 версии и беды не знали
-
проблема в лимите оперативки на запрос
-
DB::Exception: Memory limit (for query) exceeded: would use 28.08 GiB (attempt to allocate chunk of 6328914946 bytes), maximum: 27.94 GiB: While executing MergeTreeThread
-
имеется distributed таблица
-
вот запрос:
select key, referrer from requests where date=today() and dt >= now() - 300 limit 100; -
не возможно выбрать данные, вообще
-
я не говорю уже о временных рамках больше, чем сегодня
-
max_bytes_before_external_group_by = 15000000000
max_memory_usage = 30000000000 -
у нас кластер из 3х шардов х2 реплики каждый
-
на данный момент в таблице requests 935 071 276 записей
-
физически на каждой ноде по 36 Гб рама и 6 ядер
-
Всем привет, такой вопрос, а что если мы хотим отличать NULL от пустого значения в очень многих колонках, без использования Nullable (я так понимаю это антипатерн), нормальное ли решение сделать Tuple(UIn8, Type), где первый элемент это boolean который указывает на присутствие значения или есть какие-то другие вариаты?
-
ну можно использовать какое то специально значение вместо пустого
-
А так tuple UInt8/Type не будет лучше Nullable уж точно
-
ну проблема в том, что не будет такого значения везде
-
интересно, спасибо
-
2021.06.14 10:44:51.129402 [ 95 ] {} <Debug> landing.price_trade: Loading mutation: mutation_479694.txt entry, commands size: 1
2021.06.14 10:44:51.130345 [ 95 ] {} <Debug> landing.price_trade: Loading mutation: mutation_479847.txt entry, commands size: 1
2021.06.14 10:44:51.130961 [ 95 ] {} <Debug> landing.price_trade: Loading mutation: mutation_479796.txt entry, commands size: 1
2021.06.14 10:44:51.132283 [ 95 ] {} <Debug> landing.price_trade: Loading mutation: mutation_479744.txt entry, commands size: 1
2021.06.14 10:44:51.132372 [ 95 ] {} <Information> DatabaseOrdinary (landing): 75.0%
2021.06.14 10:45:08.805267 [ 45 ] {} <Information> Application: Will watch for the process with pid 53
2021.06.14 10:45:08.805380 [ 53 ] {} <Information> Application: Forked a child process to watch
2021.06.14 10:45:08.805569 [ 53 ] {} <Information> SentryWriter: Sending crash reports is disabled -
И это по кругу
-
Не поднимает базу
-
Спасибо за инфо. Вот поэтому я и не торопился обновляться = ( Пока достаточно хорошо работает на текущей версии. Хорошая причина для обновления будет избавления от зукипера, но пока не горит
-
там сам краш то со стектрейсом в логах есть?
-
Нет, в ошибках тишина
-
<Information> Application: Forked a child process to watch
2021.06.14 10:45:08.805569 [ 53 ] {} <Information> SentryWriter: Sending crash reports is disabled
ну у вас форкается процесс пишется про него Pid 53
и дальше что? опять форкается процесс? или все таки что-то другое пишется в лог? -
Я накрутил партиции по дням и сегодня все упало при загрузке.
-
В логах нет Керша, крайние точки между запусками я скинул. В остальной часте лога все штатно.
-
/data/landing/price_trade# ls -l |wc -l
177838 -
а, ну, тогда ждите просто, 1-2 часа...
вы в докере пускаете это все?
ну структуру такую надо менять, вы явно не то что-то сделали...
"партиции по дням" у вас породили очень большое кол-во партов
вы наверное too many parts в логах посмотрите наверняка clickhouse вас предупреждал... -
С 4 ночи не смог запуститься
-
У меня две таблицы по дням, одну я оцепил и запустилось. Перекину ее на месяц и подцепляю вторую должно взлететь
-
-
datagrip/dbeaver
-
https://altinity.com/blog/clickhouse-and-s3-compatible-object-storage
The structure of the data on object storage also needs to be improved. In particular, if every table had a separate prefix, it would be possible to move tables between locations. Adding metadata would allow you to restore the table from an object storage copy if everything else was lost.
Подскажите пожалуйста, как дела обостоят с этим в новых версиях КХ (к примеру в *21.1*), больше всего интересую префиксы таблиц ?
Может есть какой то workaroud ?
Спасибо! -
На какую версию обновились?
Попробуйте min_bytes_to_use_mmap_io=0 -
Я не про опции в порте, я про опции при сборке руками. И нюансы вполне могут быть.
-
Бинарники которые в pkg собираются из портов )
-
Ну пускай так, спорить не буду
-
-
Ребят а есть идея по вот этому кейсу? Не могу понять почему при обычном селекте израсходуется такое количество памяти?
-
Какая точно версия
-
clickhouse-client 21.5.5.12
clickhouse-common-static 21.5.5.12
clickhouse-server 21.5.5.12 -
попробуйте выполнить запрос с min_bytes_to_use_mmap_io=0
-
DB::Exception: Memory limit (for query) exceeded: would use N1 GiB (attempt to allocate chunk of N2 bytes), maximum: N3 GiB: While executing MergeTreeThread. · Issue #24505 · ClickHouse/ClickHouse
We have a large syslog database. At some point it starts failing as SELECT message FROM syslog WHERE timestamp > (NOW() - toIntervalHour(48)) LIMIT 1000 FORMAT Null Query id: 985cfa48-099b-4...
-
А есть ли уже фикс ?
-
В целом можно установить значение в конфиге если заработает
-
ну мержили вроде, даже в 21.5
Но вообще поставить эту настройку в дефолт конфиг максимально безобидно, просто вернется к старому поведению. -
Всем привет. Народ скажите пожалуйста , как -то можно на стороне Кликхауза сделать такой кейс:
В КХ лежит датафрейм вида:
Дата Товар Цена
01.06.2021 Куртка 100
01.06.2021 Пижама 50
05.06.2021 Куртка 100
05.06.2021 Пижама 50
07.06.2021 Куртка 100
07.06.2021 Пижама 50
То есть, это таблица с продажами за какие-то даты , которые идет по возрастанию.
Каждый день, питоновский скрипт получает новые данные по продажам за последние 3 дня. Нужно примержить этот питоновский датафрейм с продажами за последние три дня к Таблице, которая уже находится в КХ (с историческими продажами за все время).
Так как в ЕЖЕДНЕВНОМ питоновском датафрейме содержатся продажи не за 1 последний день, а за 3 последних дня, то в Таблице в КХ значит тоже есть строки с продажами за последние 2 дня ( со вчерашней заливки питоновского датафрейма) ...
Как сделать так, чтобы при ежедневной доливке в таблицу КХ питоновского датафрейма с продажами за последние 3 дня , чтобы в этой таблице КХ сначала удалялись все строки у которых Дата совпадает с теми датами , которые есть в питоновском датафрейме. А потом уже к этой таблице КХ дописывать питоновский датафрейм с продажами за последние 3 дня.
Можно ли такое провернуть? -
Вот сюда смотрели?
https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/replacingmergetree/ReplacingMergeTree | Документация ClickHouseReplacingMergeTree Движок отличается от MergeTree тем, что выполняет удаление дублирующихся записей с одинаковым значени
-
#вакансия #удаленка #dba #clickhouse
ищем крутого dba. clickhouse или с желанием изучить. зарплата от 180 обсуждаемая. Любой город, можно в офисе(мск сити), если хочется. тк рф, дмс, все дела. ищем активных и целеустремленных :-) по вопросам в лс -
такое ощущение, что вы каждый день эту вакансию постите :)
и такое ощущение, что вот эта вакансия гораздо лучше вашей :)
https://t.me/clickhouse_ru/218510Denny Crane [Junior support specialist at Altinity (NB,Canada)] in ClickHouse не тормозитпро нашу вакансию, я не согласен с ее описанием на hh. Мы готовы взять людей не гуру в КХ, или вообще с 0 опыта вот мое описание вакансии https://www.sql.ru/forum/1336096/clickhouse-specialist-altinity-com-udalenka-ot-3-000-do-5-000-usd я собеседую людей которые не знаюТ слова такого - clickhouse
-
не каждый день, чем лучше? слишком много субъективности, с попыткой развести холивар, пардон, я такое не люблю)
-
бывало и по 2 раза за день. хватит спамить, такое никто не любит
-
спасибо, что следите за мной. но это единичный случай. очередная субъективность с попыткой намазать на холивар. желаю удачи в этом путешествии)
-
Всем привет!
Есть таблица: action_id, session_id, time. Нужно узнать, сколько было активных сессий в каждую секунду времени.
Если брать:
select session_id, min(time) session_start, max(time) session_end from actions group by session_id;
и джоинить со всеми секундами за период с условием:
секунда between session_start and session_end
, то работает ооочень долго (по сути декартово произведение с последующей фильтрацией на between). Может кто-то уже решал такую задачу и есть best practice? -
решал такое
-
сейчасй найду
-
group by time
-
нееееее
-
Если правильно понял, покажет сколько было уникальных сессий в секунду, но в этот момент времени могло и не быть экшнов в сессии, но сессия была живая и ее надо считать
-
select ts,maxnum_concurrent_sessions) from (from(create_time + arrayJoin(range(session_start-session_end)) ts,
count() AS num_concurrent_sessions
from XXX
) as t1 -
как то так
-
поиграйтесь
-
ну так сначала можно сделать ARRAY JOIN [start,...,end]
-
select ts,max(num_concurrent_sessions) from (from(create_time + arrayJoin(range(session_start-session_end)) ts,
count() AS num_concurrent_sessions
from XXX
) as t1 group by ts -
Тимур, спасибо, попробую!
-
Я еще решал это по-другому, тк спотыкался в объем данных
-
range(session_end-session_start) конечно
-
Дмитрий, если не сложно - поясни, плз, идею
-
тимур по факту ее и изобразил.
Разве что я бы наверное использовал
https://clickhouse.tech/docs/en/sql-reference/functions/date-time-functions/#timeslotsstarttime-duration-sizeDates and Times | ClickHouse DocumentationFunctions for Working with Dates and Times Support for time zones. All functions for working with the date and time that
-
еще я делал через arrayCumSum
-
login был 1, logout был -1
-
и далее было maxArray от arrayCumSum
-
Реализовал идею Тимура, но уперся теперь в
A call to function range would produce 134065378 array elements, which is greater than the allowed maximum of 100000000 -
Внутри сессий по несколько тысяч секунд (то есть сессии обычно по нескольку десятков минут бывают длительностью)
-
Но как я понял, суммарно на блок выходит больше чем 100000000 элементов
-
Timur , обходил как-то это ограничение?
-
Arraycumsum
-
Писал выше
-
еще timeSlots должен помочь - но там будет усреднение как я понимаю
-
для меня это не подходило
-
нужно было считать точное кол-во сесий
-
C timeSlots немного веселее
-
А что ты передавал в arrayCumSum в качестве исходного массива?
-
2 selectа
-
1) session start time, 1
-
2) session end time, -1
-
union между ними
-
точно не помню
-
где-то это есть. нужно поднимать notes
-
SELECT d, maxArray(c1) AS cFROM( SELECT d, - 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.
-
но, явно придется переделать под твои нужды
-
итог - максимальное кол-во активных сессий за день
- 15 June 2021 (89 messages)
-
Спасибо!
-
а кроме кордампа разве stacktrace никуда не пишется?
-
Он вот такой, малоинформативный:
<Fatal> BaseDaemon: ########################################
<Fatal> BaseDaemon: (version 21.3.13.1, no build id) (from thread 947139) (no query) Received signal Segmentation fault (11)
<Fatal> BaseDaemon: Address: 0x818891000 Attempted access has violated the permissions assigned to the memory area.
<Fatal> BaseDaemon: Stack trace: 0x57d5d0d 0x59053b0 0x80cf13e0e 0x80cf133cf
<Fatal> BaseDaemon: 0. 0x57d5d0d
<Fatal> BaseDaemon: 1. 0x59053b0
<Fatal> BaseDaemon: 2. 0x80cf13e0e
<Fatal> BaseDaemon: 3. 0x80cf133cf -
ну да, странно, debug символы не смогли разрезолвить...
а они вообще стоят? -
Проверьте ulimit и загляните в /var/lib/clickhouse/cores
-
дампа нет. Если он пишется, в dmesg об этом сообщено. Например:
pid 38029 (clickhouse), jid 0, uid 800: exited on signal 11
pid 11587 (conftest), jid 0, uid 0: exited on signal 11 (core dumped)
ulimit
core 1073741824 -1
только тот самый софт лимит который он сам (clickhouse) себе ставит и управляется через <core_dump><size_limit>. Хард лимита нет.
да и по отправке руками сигнала -SEGV дамп пишется как надо и куда надо. Без проблем. А при вываливании по этой ошибки файл с дампом нулевой длинны -
"чуть более правильный ответ" критикуешь - предлагай)
-
Стоят.
# file /usr/local/bin/clickhouse
/usr/local/bin/clickhouse: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 13.0 (1300139), FreeBSD-style, with debug_info, not stripped
# nm /usr/local/bin/clickhouse | wc -l
533349
# nm /usr/local/bin/clickhouse | grep -c LowCardinality
781 -
Про разработку КХ - есть отдельный чат для разработчиков https://t.me/joinchat/B44Vi1T-PQA_9TwyAIBu-Q попробуйте спросить там.ClickHouse developers, public
Public discussion group for ClickHouse contributors
-
Спасибо!
-
Ну и если оно у вас стабильно воспроизводится - то проще всего запустить КХ внутри gdb.
-
Есть ещё вариант - можно попробовать превратить адреса из стектреса в строки с помощью addr2line (из binutils)
-
Ну как стабильно... воспроизводится.. Раз в сутки +- при больших нагрузках. думаю, тут с gdb проблематично будет )
-
addr2line -afiCe /usr/bin/clickhouse 0x57d5d0d 0x59053b0 0x80cf13e0e 0x80cf133cf
-
-
# addr2line -afiCe /usr/local/bin/clickhouse 0x57d5d0d
0x00000000057d5d0d
??
:-) -
Ну эти ulimit у процесса ещё раз проверьте. Лучше всего через /proc/$PID/limits
-
-
-
-
Вроде выглядит норм. Если включены trace логи - можно ещё глянуть что поток 947139 делал перед падением.
-
так я написал про 2 ответа и уточнил у вас кэйс
вы ответили, но рядом Дмитрий Титов предложил отличный вариант с cityHash -
Я подумал, что у вас был свой вариант, но вы его не написали
🙌 -
на самом деле не было
кроме вариантов использовать optimize table ... deduplicate (тоже не ахти вариант) или выяснения подмножества столбцов, которых было бы достаточно для дудупликации
но есть привычка уточнять кэйс перед тем, как советовать что-то специфичное -
чем плохо перечисление всех колонок?
-
Здравствуйте. Читаю доку по движку Atomic. Там написано: Для таблиц ReplicatedMergeTree рекомендуется не указывать параметры движка - путь в ZooKeeper и имя реплики. В этом случае будут использоваться параметры конфигурации: default_replica_path и default_replica_name. А что за значения по дефолту будут? Где их посмотреть?
-
Подскажите в какой версии бд появился тип данных Map?
-
Добрый день! Их можно задать в config.xml в clickhouse-server. Более подробно описано на странице документации: https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/#creating-replicated-tablesData Replication | ClickHouse Documentation
Data Replication Replication is only supported for tables in the MergeTree family: ReplicatedMergeTree ReplicatedSumming
-
Да, задать можно, но я хотел посмотреть, чему они равны, если я их не задал. В system.settings их не видно.
-
Как экспериментальная фича в https://clickhouse.tech/docs/en/whats-new/changelog/#clickhouse-release-v21-1-2-15-stable-2021-01-182021 | ClickHouse Documentation
ClickHouse release v21.8, 2021-08-12 Upgrade Notes New version is using Map data type for system logs tables (system.que
-
В первом приближении потому что дедубликация идёт по ключу сортировки, и если явно не указать разные ключ сортировки и pk, то все столбцы полетят в оперативку (немного натянуто).
Во втором приближении даже в фоне дорого сравнивать полные строки, сколько у вас столбцов? 5, 10, 100500?
А решение с cityHash аккуратно закрывает обе проблемы -
👍
-
Всем привет! А в какую часть конфига users.xml вставляется настройка max_partitions_per_insert_block?
-
<profiles><default><max_partitions_per_insert_block>XXX</max_partitions_per_insert_block></default></profile>
-
Добрый день.
Подскажите пожалуйста, если в JSON несколько повторяющихся значений, например:
[{"id":1,"name":"Test»,»subtotal":84.99,"count":1},{"id":2,"name":"Test2»,»subtotal»:267.0,»count»:3}
как забрать оба значения count в 2 разных столбцах?
Если делать visitParamExtractRaw(response, 'count'), - то возвращается только первое значение, равное 1 -
-
-
podTemplates
надо задать
в котором
.spec.containers указать
вообще при добавлении новых нод, оператор автоматом текущую схему (без данных) раскидывает по новым шардам и репликам...
что вас не устраивает конкретно в этом способе?
вы хотите какой то тестовый кластер делать? в котором в CRD схему определить через configmap? -
-
Мне при подьёме кластера нужно создавать в нём с десяток БД
-
-
Добрый день.
Столкнулся в питоне с «32 Broken pipe”, во время пуша в кликхаус.
Не большой скрипт. Скачиваю данные из постгри, обрабатываю и пушу в кликхаус.
При этом появление эксепшена не зависит от объема и самих данных, которые я записываю… (пробовал пушить 1 захардкоженный рекорд)
Обнаружил, что это зависит от объема запрашиваемых данных (данных не так много ~40к). Работает это в контейнере (дебиан). На локальной машине все отрабатывает штатно (убунту).
Питон 3.8, либа для кликхауса - aiochclient, postgre - psycopg2
Подскажите пожалуйста, в какую сторону копать?) -
https://github.com/Altinity/clickhouse-operator/blob/master/docs/chi-examples/02-templates-06-sidecar.yaml
вот пример как ConfigMap монтируется внутрь подаclickhouse-operator/02-templates-06-sidecar.yaml at master · Altinity/clickhouse-operatorThe ClickHouse Operator creates, configures and manages ClickHouse clusters running on Kubernetes - clickhouse-operator/02-templates-06-sidecar.yaml at master · Altinity/clickhouse-operator
-
То что нужно. Столько примеров перековырял а это пропустил. Спасибо
-
если все получится, если не трудно, сделайте pull request в котором конкретно SQL примеры приложите?
тут еще какие тонкости могут быть
если initdb стадия долгая, могут liveness пробы отвалиться... -
Без проблем. По поводу проб спасибо гляну. Но там не такой тяжелый скрипт для бутстрапа будет чтобы отвалилось что-то
-
Спасибо!
-
используйте настройку ПРАВИЛЬНО
ее можно просто через INSERT INTO ... SETTINGS переопределить
как временное решение
вообще если у вас один блок затрагивает 100 партиций и так каждый раз
значит вы неправильную структуру таблицы сделали
и вам надо другой PARTITION BY делать -
Да, я понимаю что она не просто так сделана) Спасибо!)
-
А еще такой вопрос, если я не хочу чтобы пароль от default хранился в открытом виде в default-password.xml, мне надо получается в /etc/clickhouse-server/users.d/users.xml добавить следующее
<users>
<default>
<password_sha256_hex>my_hash</password_sha256_hex>
</default>
</users>
и удалить default-password.xml? Или есть более правильный/простой способ? -
Добавить свой sha256 да
-
-
то что описали и есть более правильный способ
не хотите хранить пароль в открытом виде, не храните =) -
Спасибо, просто думал вдруг еще что-то нужно сделать)
-
Попробовал заменить чтение из бд, на чтение из файл… ничего не изменилось. Все так же падает на пуше
-
а с контейнера до кликхауса вообще достучаться получается-то?
curl http://clickhouse-ip:8123/
aiochclient не пробовал. А с pandahouse, clickhouse-sqlalchemy и infi.clickhouse_orm проблем не наблюдалось -
Кликхаус доступен.
Если уменьшить количество данных, то все успешно пушится… -
странно, 40к записей маловато, конечно ) А в логах клика что пишет при ошибке? Может там не в том формате где-то данные прилетают? Ну какой-нибудь null где его быть не должно, например