- 01 June 2020 (244 messages)
-
Joined.
-
Он сам все разобьет на партиции как ему надо 🙂
Если указать партиционирование при создании таблицы, то он просто будет следовать этому правилу разбивки -
Лучше сразу при работе с кх выкинуть из головы подходы, которые используются в mysql, postgre, etc. 🙂
-
будет одна партиция, с именем tuple()
-
спасибо за поправку 🙂
-
Слияниий
-
Подскажите как правильно чанками по 30к перебрать таблицу размером 39kk с наименьшей нагрузкой на проц?
Пробовал разные движки MergeTree, SummingMergeTree, Log
Но везде втыкаюсь в проблемы, например:
1. SummingMergeTree
При limit 7620000, 100
0.93 sec.| 39,318,115 rows.| 4 GB
Но при этом нагрузка на 64 ядра по 30-40% на каждое
если добавить сюда еще и order by из-за того что кх не упорядоченно отдает данные, то тогда
21.26 sec.| 39,318,115 rows.| 4 GB
нагрузка до 50% на ядро -
Кроме как перед перебором с агрегировать данные и положить в лог (чтобы не делать order by), возможны еще решения?
-
Добрый день! Подскажите, пожалуйста, как после нескольких инсертов в одну из реплик убедиться, что данные доехали до остальных реплик? Достаточно ли дожаться, чтобы в system.replication_queue было пусто? Или надежнее проверять через count()?
-
https://clickhouse.tech/docs/ru/operations/settings/settings/#settings-max_threads
но это чисто ограничение самого запроса, для него не будет юзаться больше потоков чем указано в этой настройке.Настройки | Документация ClickHouseНастройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
Joined.
-
Добрый день!
Меняю структуру таблицы данных. Поэтому встала задача перелить данные из старой таблицы в новую.
Вставляю пачками по 6-10 тыс записей.
Запросом SELECT-INSERT к clickhouse-client
Через какое то время падает с Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (total) exceeded: would use 13.96 GiB (attempt to allocate chunk of 4503208 bytes), maximum: 13.96 GiB.
Если уменьшаю размер пачки, то просто падает чутка позже.
Что делать? -
а зачем пачками по 6-10тыс?
я переливал млрд записей просто INSERT SELECT -
потому что не получается сразу вот так - возникает та же ошибка с ОЗУ. Пробую пачками - не помогает
-
что мягко говоря выглядит странно
-
Сколько озу на сервере?
-
сколько ОЗУ на сервере
какой max_insert_block_size
сколько партов в вашей таблице из которой идет селект
какой средний/медианный размер парта в вашей таблице из которой идет селект
? -
Я что-то понять не могу, пытаюсь добавить ALIAS к столбцу ALTER TABLE events ADD COLUMN some_alias ALIAS id_str_1; получаю ClickHouse exception, code: 36, host: clickhouse-1.services, port: 8223; Code: 36, e.displayText() = DB::Exception: Data type have to be specified for column `some_alias to add (version 20.4.2.9 (official build))`
-
16 Gb, max_insert_block_size не настроен. Выборка идет внутри партиции, партиция состоит из 3 файлов по 7-8 Gb
-
ALTER TABLE events ADD COLUMN some_alias String ALIAS id_str_1
-
А когда оно начало требовать тип? с какого CH?
-
-
не знаю, но он вроде позволяет expression задавать, и понятия "родительской колонки" нет
-
попробуйте уменьшите max_insert_block_size (он всегда настроен по умолчанию миллион строк).
может у вас слишком широкие строки. -
а сколько в IDLE режиме памяти занято? (когда не вставляете ничего)
-
Joined.
-
insert select по 6-10 к строк, это нужно уменьшать инсерт блок сайз до этих чисел или даже меньше судя по всему
-
-
Спасибо за помощь. Разобрался.
Это дефект на стороне DataGrip.
Не смотря на то, что в настройках соединения SSL включен, сертификат отдан и включена его проверка, при коннекте это не учитывалось.
В строке коннекта насильно добавил ssl=true и блок с SSL начал работать.
Отправлю ребятам из JB ишью в их трекер 🙂
Оставлю этот пост здесь. Вдруг кому пригодится 🙂
#datagrip #ssl #yandex -
ну там не OOM приходит, а просто убивается по лимиту памяти.
-
какой средний/медианный размер НЕСЖАТОГО парта? (uncompressed_size)
-
В доке написано что это бесполезно
-
ну там 13 занято, он 1гиг резервирует и потом убивается, почему бы и да
-
есть настройка для размера блока селекта, но непонятно будет ли работать для INSERT SELECT
-
у Денни влияло, у меня тоже влияло
https://t.me/clickhouse_ru/153076【D】【J】 in ClickHouse не тормозитвот так и знал, что у вас уже будет готовый гист )))) спасибо ! получается так - (размерпарта/max_insert_block_size)*max_threads партов?
-
хотя может это max_block_size влиял...
-
какой средний/медианный размер НЕСЖАТОГО парта? (uncompressed_size)
и сколько строк в партах?
просто если вы вставляете по 6к и вылетает по памяти - у вас строки монструозно широкие должны быть... -
-
-
~2500 bytes per row...
все правильно, вы в доку не туда смотрели.
вот эти дефолты надо менять (уменьшать). И все будет хорошо.
у вас минимум по ляму строк вставка - т.е. 2.5 * 10м * 8 (мой магический фактор расфигачивания в памяти)
min_insert_block_size_rows 1048576
min_insert_block_size_bytes 268435456 -
В Clickhouse нет транзакционной целостностности, нормальных UPDATE, уникальных индексов и внешних ключей. Помимо этого справочник по-хорошему надо создавать и обновлять на каждом узле кластера отдельно.
Одним словом, в CH гораздо больше проблем со справочниками, чем пользы, лучше подключить ODBC Dictionary из PostgreSQL. -
ну на каждом узле, можно через репликацию сделать
-
так реплицируется же на реплики, а не на шарды, разве нет?
-
Содержимое словарей известно заранее?
-
Можно извратиться и сделать Distributed view над справочником, чтобы он гонялся туда-сюда с одного шарда, но это как-то уж совсем странно😄
-
-
Joined.
-
-version не ?
-
ver — столбец с версией, тип UInt*, Date или DateTime.
Нельзя отрицательный -
Добрый день
С какой версии работают и работают ли вообще quantile функции с Decimal ?
У нас сейчас при любом запросе они возвращают 0.0
avg при этом работает нормально, например -
MaxUInt - ver
-
SELECT
toUInt64(-1000) AS a,
toUInt64(-30000) AS b,
a > b AS comp
┌────────────────────a─┬────────────────────b─┬─comp─┐
│ 18446744073709550616 │ 18446744073709521616 │ 1 │
└──────────────────────┴──────────────────────┴──────┘
на самом деле и с отрицательными пойдет -
Попробуем.
Просто есть сомнения, что это не оптимальный вариант. Может, как-то через запрос можно?
Было бы что-то типа MySQL-овского Insert on duplicate key... -
можно, но безумно дорого будет по затратам :)
-
а так, это вполне ок вариант, если собираетесь использовать replacingMergeTree
-
а это что-то архитектурно принципиальное, что в materialized view не корректно работает такая конструкция:
select
…
from table_name where (..) in ( select … from table_name) -
почему некорректно?
-
и mat_view это триггер на инсерт буквально, те такое будет вызываться на каждую вставку, что выглядит расточительным
-
если в table_name лежит N строк удовлетворяющих условию
where (..) in ( select … from table_name)
то тогда на выходе ожидается получить N строк
но в реальности получается M строк которые были на входе в MV -
на выходе будет то количество вставленных строк которые удовлетворят условию where (..) in ( select … from table_name)
-
CREATE TABLE tmp1 (
`key` String,
`val` Int32
) ENGINE = MergeTree()
ORDER BY key
CREATE TABLE tmp2 (
`key` String,
`val` Int32
) ENGINE = MergeTree()
ORDER BY key
CREATE MATERIALIZED VIEW mv_tmp1_to_tmp2 TO tmp2 (
`key` String,
`val` Int32
) AS
SELECT
key,
sum(val) as val
FROM tmp1 where key in (
SELECT distinct key FROM tmp1
)
group by key
insert into tmp1 values ('1', 1)
insert into tmp1 values ('1', 1)
select * from tmp1
| key | val |
| 1 | 1 |
| 1 | 1 |
select * from tmp2
| key | val |
| 1 | 1 |
| 1 | 1 | -
Ожидаемый результат:
select * from tmp2
| key | val |
| 1 | 1 |
| 1 | 2 | -
Вот эта часть
SELECT
key,
sum(val) as val
FROM tmp1
Видит только тот блок данных, что вставляется. -
думай о MAT VIEW как триггер на инсерт
-
да, просто никогда проблем не было в кейсах
SELECT
key,
sum(val) as val
FROM tmp2 where key in (select distinct key from tmp1) -
потому что mat_view работают несколько иначе, чем себе представляете
-
и вообще вся эта секция с дистинктом бесполезна
-
для конкретного случая с этим mat view
-
здесь получается что тригер повесился на FROM tmp1, а where key просто выполнился как подзапрос
-
ну вроде того, единственное не уверен за область видимости второго FROM tmp1
-
судя по том, что вставились обе строки. то видит он тоже только блок вставки, иначе первая строчка бы не вставилась
-
тогда получается что и первый tmp1 и второй tmp1 имеют доступ к данным mv 🤔🤔🤔
-
Joined.
-
Выглядит как бага ну или фича) смотря с какой стороны посмотреть
-
я думаю as intended
-
потому, что за попытку читать всю таблицу(использование JOIN в MV и тд) на каждую вставку тут стараются бить по рукам:)
-
ну тут кейс такой просто
что при вставке раз в час необходимо собрать всю инфу по вставленному и переложить в ttl таблицу -
учитывая ваш пример с sum(val) может вам summing engine лучше подойдет?
-
увы нет 🙁
по ttl потом пойдет воркер со скип-лимит и засинхронит изменения в другие системы -
У вас вставка раз в час, и вам нужно сгруппировать это дело в набегающий итог?
-
вообще самый нормальный путь это вставлять с агрегированные данные каждый час, а набегающий итог считать при селектах
-
здравствуйте, подскажите пожалуйста, есть вопрос, если сделать двухуровневую кластеризацию, выделяя подкластер под проект, правильно ли я понимаю, что выполнять запрос с объединением какого-либо рода таблиц по всему кластеру можно без проблем через функцию remote? то есть хочется иметь разделение по возможностям горизонтального масштабирования по проектам, потому что они разные по нагрузкам, но при этом иметь возможность кверить какие-то данные по всем проектам в одном запросе.
-
можно начать хитрить и обернуть таблицу tmp1 в merge движок, и тогда возможно запрос полетит к настоящей таблице
-
ноды клика вообще ничего не знают про кластер и тд.
вы спокойно можете в ремоут секции конфига сделать N кластеров
level_1
server_1
......
server_5
level_2
server_6
......
server_10
level_3
server_11
......
server_15
all_servers
server_1
......
server_15 -
не совсем понял о чем речь)
есть конечно вариант засунуть в цепочку между tmp1 и tmp2 еще null engine, но не очень хочется -
и сделать нужные вам DISTRIBUTED таблицы
-
спасибо!
-
тут все зависит от специфики
-
допустим вам нужно сделать только набегающую сумму
-
MV не умеет в union, сие есть паршиво
-
CREATE MATERIALIZED VIEW mv_tmp1_to_tmp2 TO tmp2 (
key String,
val Int32
) AS
SELECT
key,
sum(val + tmps.val) as val
FROM tmp1 LEFT JOIN (SELECT key, val FROM tmp2 WHERE key IN (SELECT key FROM tmp1) ORDER BY val DESC LIMIT 1 BY key ) as tmps USING (key)
group by key -
-
но это кривая хрень
-
и возможно даже неправильно работает
-
tmp2 имеет ttl час 🙂 соответственно при следующем заполнении она будет пустой 🙂
-
ну. это далеко не обязательно:)
TTL он удалить данные после истечения срока в неопределенное время -
ну можно заменить tmp2 на tmp1 в моем запросе. но там хитрее будет
-
с left join кстати пробовал
аналогичный результат получился как и в моем первом примере 🙂 -
такое ощущение складывает что в каком бы месте и сколько бы раз я не обращался к tmp1 внутри mv она будет видеть только данные от тригера
-
ну потому, что он заменяет все обращения к tmp1 на данные из триггера
-
-
-
такой вопрос, зачем вам очищать таблицу по TTL?
-
есть сурс таблица - динамика по объектам с некоторыми статусами
и во внешние системы необходимо синхронизировать только те, что поменяли свой статус.
сам итоговый статус можно получить только просуммировав всю динамику -
и сответственно результат того что происходит если это делать по всей таблице 🙂
это не учитывая что должны протекать фоновые процессы -
и сответственно результат того что происходит если это делать по всей таблице 🙂
можно запрос показать? -
именно сам запрос увы нет
долбаное NDA но могу пример накидать -
ну, да речь о примере
-
просто я бы допустим(из грубого описания) заменил движок на summing или агрегейтинг и добавил бы столбец(таймштамп, номер батча), по которому бы отсекал всех тех, кто не обновился
-
Схлопывать данные в динамике нельзя, нужны для других процессов
SELECT
field1,
field2,
field3,
sum(p1) as m,
sum(p2) as m2,
if(m + m2 > 0, 1, -1) as isVisible
FROM table
group by field1, field2, field3
LIMIT 18000000, 30000 -
и запросы были бы вида
select key, sum(val) FROM summing GROUP BY key HAVING max(updated_at) > now() - INTERVAL 1 HOUR -
Народ, а подскажите кто нибудь
Народ, помогите
у меня кластер с 2 хостами \ репликами
я пытаюсь сделать следующий тестовый сценарий:
- успешно создаю таблицы CREATE TABLE default.test(event_time DateTime, test UInt64) ON CLUSTER "all-replicated" ENGINE MergreTree() ORDER BY tuple() + CREATE TABLE default.test_distr(event_time DateTime, test UInt64) ON CLUSTER "all-replicated" ENGINE Distributed("all-replicated", default, test, test) - четвертый параметр подразумевает, что данные через distributed таблицу должны вставляться поровну в каждый хост кластера
- стопаю сервер на 1м хосте
- успешно вставляю данные INSERT INTO default.test_distr ... на втором хосте
- я ожидаю что у меня увеличиться значение DistributedFilesToInsert в system.metrics на втором хосте
и что default.test MergeTree будет иметь только половину данных, но вместо этого я вижу что в distributed таблице данных столько же сколько в merge tree и никаких ошибок связанных с distributed connection
что я делаю не так? -
30000 в лимите не спроста 🙂
-
отдельный AggregatedMergeTree Materialized VIew вам не поможет?
-
Yuri Alexandrovich, [31.05.20 21:13]
можно ли как-нибудь узнать сколько будут весить данные, которые отдаются КХ по запросу? -
те хочешь воcпользоватся internal_replication='false'?
-
LIMIT 18000000, 30000
вот же виновник -
он сначала все группирует а потом пропускает 18млн ключей и достает жалкие 30к
-
да весь этот запрос виновник моих бессонных ночей)
-
В общем, я бы попробовал сделать, как я предложил
-
замена tmp2 на таблицу c summing agregating движком
но можно и просто ваш запрос чутка улучшить -
вы не можете/хотите забирать больше 30к за раз?
-
не можем
-
сколько у вас юников?
-
примерно?
-
здравствуйте, можно вопрос, я правильно понимаю, что если какую-то таблицу небольшую, которую надо джойнить делать на каждом шарде, делать поверх шардированных таблиц Distributed таблица, то сервер без дополнительных ухищрений с моей стороны, при джойне левой distributed таблицы и правой distributed таблицы, которая есть на каждом шарде, будет делать на каждом шарде, и потом объединит результаты, а вот если правая таблиц только на одном шарде, то для левой таблицы он потащить на один шард все данные левой таблицы и джойнит там? Группировку данных он тоже будет делать на шардах, если правая таблица есть на всех шардах?
-
скорее всего нет, кликхаус буферизует кусочек данных и сразу их отправляет, но в http он передает некие хедеры о состоянии запроса, возможно что то вам там будет интересно
-
спасибо
-
40kk при условии наличия ~20-30% данных
-
потенциально их может стать 1лярд
-
а раз в час не более 400к - 1кк уников
-
можно сделать так
FROM table
WHERE cityHash64(field1, field2, field3) % 1000000 = 0
group by field1, field2, field3 -
и так все пробегать 0-1-2-3-4-999999, это должно быть быстрее чем делать лимит каждый раз
-
либо можно один раз посчитать весь запрос и выгрузить в временную таблицу и уже по ней бегать лимитом
-
вот в этом и была задумка ))
-
Можно написать global join тогда правую таблицу разошлет
-
ну временную таблицу вы можете и руками создавать, транкейтить и тд.
не используя механизм mat view -
по ресурсам не выходит критичной разницы, что делать global , что дублировать правую по шардам, а потом делать поверх нее Distributed?
-
нет, заранее нельзя, можно попробовать через заголовки ответа
X-ClickHouse-Progress
https://clickhouse.tech/docs/ru/interfaces/http/
https://clickhouse.tech/docs/ru/operations/settings/settings/#settings-send_progress_in_http_headers
https://clickhouse.tech/docs/ru/operations/settings/settings/#cancel-http-readonly-queries-on-client-closeHTTP-интерфейс | Документация ClickHouseHTTP-интерфейс HTTP интерфейс позволяет использовать ClickHouse на любой платформе, из любого языка программирования. У
-
с дублированной дешевле. На самом деле не нужна дистрибьютид таблица для нее. Она ведь одинаковая на всех шардах.
-
спасибо
-
то есть если я делаю Tab1_distrib join Tab2, то сервер сджойнит каждый шардированный кусок левой таблицы с правой на соответствующем шарде?
-
Да
-
спасибо!
-
так, кажется я понял, таблицы у меня не реплицированные
обычный MergeTree
стоит в настройках Для шарда
<internal_replication>true</internal_replication> -
ну это значит, что дистрибьютед движок не будет пытаться рассылать один и тот же блок данных на реплики
-
ты ведь создал 1 шард и 2 реплики. а не 2 шарда по 1 реплике?
-
да, я создал один шард, две реплики...
ок. понял, надо два шарда по 1й реплике, спасибо -
так, попробовал 2 шарда с 1 репликой в каждом
distributed таблица создается с ключом шардирования
то есть часть данных должны скармливаться в MergeTree а часть данных должны складываться как DelayedDistributedFiles
разве нет?
вставка идет без проблем
чтение из distributed таблицы обрывается в клиенте
DB::NetException: Connection refused (shard-0-0:9000)
этот хост выключен
вроде ожидаемое поведение
но я не понимаю, почему DistributedFilesToInsert
все время 0
;( -
skip_unavailable_shards=1 настроечка, что бы скипать недоступные шарды и не кидать эксепшен
-
а какие значения принимает test?
-
ну как и положено нечетные
SELECT * FROM default.test LIMIT 10;
┌──────────event_time─┬─test─┐
│ 2020-06-01 11:53:50 │ 1 │
│ 2020-06-01 11:53:50 │ 3 │
│ 2020-06-01 11:53:50 │ 5 │
│ 2020-06-01 11:53:50 │ 7 │
│ 2020-06-01 11:53:50 │ 9 │
│ 2020-06-01 11:53:50 │ 11 │
│ 2020-06-01 11:53:50 │ 13 │
│ 2020-06-01 11:53:50 │ 15 │
│ 2020-06-01 11:53:50 │ 17 │
│ 2020-06-01 11:53:50 │ 19 │
└─────────────────────┴──────┘ -
и папка /data/default/d_test/ пустая?
-
так
очень интересно
SELECT
event_time,
CurrentMetric_DistributedFilesToInsert
FROM system.metric_log
WHERE CurrentMetric_DistributedFilesToInsert > 0
┌──────────event_time─┬─CurrentMetric_DistributedFilesToInsert─┐
│ 2020-06-01 12:02:42 │ 350 │
│ 2020-06-01 12:06:13 │ 137 │
└─────────────────────┴────────────────────────────────────────┘
оно значит не все время 0 -
ну это возможно те файлики, что вставлялись в живой шард
-
нет, сейчас папка не пустая...
но при этом gauge показывает 0
я не понимаю -
нет, шард не мог подняться, вставка начинается строго после того как первый шард гасится
-
ну я имею в виду локальный шард
-
он же тоже через дистрибьютед вставляется
-
там 471 .bin файл лежит
ls -la /var/lib/clickhouse/data/default/test_distr/default\@chi%2Dtest%2Dcluster%2Dfor%2Dalerts%2Ddefault%2D0%2D0\:9000/ | wc -l
471 -
выглядит как баг в метрике
-
-
всем привет!
возможно кто то сталкивался
на прошлой неделе обновили мускул до 8 версии
не знаю точно ли с обновлением связано но
обнаружили что внешние словари странно теперь себя ведут
2020.05.29 04:23:19.459080 [ 53376 ] {} <Error> ExternalDictionariesLoader: Could not update external dictionary 'g_hits_1', leaving the previous version, next update is scheduled at 2020-05-29 04:23:34: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Exception: Connections to all replicas failed: database@mysql_host:3306 as user clickhouse, Stack trace (when copying this message, always include the lines below)
при неудачно попытке обновление шедулится но так и не выполняется и словари протухают
если выполнить SYSTEM RELOAD DICTIONARIES обновится и сразу фризится, повторных попыток нет
ClickHouse server version 20.3.8 revision 54433 -
Всем доброго дня! Ставлю параметр в КЛ "set optimize_move_to_prewhere = 0;" проверяю "select name,value from system.settings;" стоит, но запрос все еще не работает, делаю рестарт, сбрасывается снова в "1", прописываю через config.xml "<optimize_move_to_prewhere>0</optimize_move_to_prewhere>" рестартую, ноль реакции. Server v20.4 client 20.4
Кто знает, кто сталкивался посоветуйте, что не так, пожалуйста -
optimize_move_to_prewhere - нужно прописывать в users.xml
-
кстати был помню разговор перенести все конфиги в system таблицы, чего-то решили с этим в итоге ?
-
нет, не помогла, может еще есть варианты?
-
В профиль прописали? У
юзера точно тот профиль в который прописали? -
секунду)
-
а что написано в select ? Как пачки формируются?
-
ну а как вы думаете лимит, оффсет работают? они скроллируют сквозь себя записи, невозможно спустится сразу в 7620000
запоминать макс id (PK), и спользовать его в where ?
решения зависит от того зачем вам это нужно -
а зачем? репликация обычно 1,2 сек, т.е. какая разница, из какой реплики выбирать?
-
например если опустить макрос {shard} в zk path , то таблица будет реплицирована на все ноды (будет один шард), ну и можно задать хоть 100 конфигураций, и наделать 10005000 макросов
-
У меня несколько этапов расчета. На первом считается куча формул в разных разрезах (разные group by) и результаты вставляются в локальные таблицы. Различные разрезы при этом запускаются на различных репликах. А потом второй этап расчета - также запускается на всех нодах, но оперируют результатми первого этапа. Иногда не хватает несколько секунд, чтобы результат первого этапа зарепцилировался и тогда во второй этап попадают не все данные. При этом у меня есть возможность немного подождать. В это время гарантировано ничего вставляться нового не будет.
-
больше года, до этого выдавало DB::Exception: Illegal type Decimal(18, 3) of argument for aggregate function quantile.
select quantile(a) from (select toDecimal128(10,18) a union all select toDecimal128(10,18))
10.000000000000000000 -
есть кворумный инсерт, там можно ждать что n реплик вставило
-
спасибо, покопаю
-
А вообще забавная ситуация. Пытаюсь в цикле вставить одну и ту же пачку несколько раз, размер ее знаю. Свободной оперативы все меньше и меньше и она в итоге заканчивается. Запрос на вставку вызываю в цикле на питоне - скармливаю его через subprocess clickhouse-client -mn -q. Подозреваю, что клик просто не успевает освободить память
-
sum(val) as val
FROM tmp1
tmp1 -- это буфер инсерта (а там одна строка) настоящая таблица tmp1 вообще никогда не читается в MV -
ничего такого тут нет, например у КХ кеш марков по умолчанию 5ГБ , поэтому надо смотреть что там у вас происходит
мониторить select * from system.asynchronous_metrics where metric like '%MarkCacheBytes%'
плюс мержи могут начаться и скушать пару гигабайт, и т.д.
рекомендую добавить max_threads=1 для начала
а что написано в select ? Как пачки формируются? -
Приветствую! Восстанавливали таблицу после смерти zookeeper'a (переводил в не реплицированную, потом обратно), через неделю clickhouse упал со словами <Error> Application: Caught exception while loading metadata: Code: 49, e.displayText() = DB::Exception: Table contains parts with adaptive and non adaptive marks, but setting enable_mixed_granularity_parts is disabled: Cannot attach table
-
-
можно включить в настройках сервера?
-
уже было несколько таких человек емнип
-
INSERT INTO table2 (
time,
...
)
SELECT
time,
...
FROM table1
where time=XXX. Тут я знаю кол-во строк в этой пачке и пробую вставить ее в цикле. -
Подскажите, делаю бэкап таблицы для переноса, так вот несколько партиций успешно обработались, потом оставшиеся выпали с ошибкой, что Query.bin doesn't exist.
Как можно исправить? -
как объеденить несколько колонок в массив и потом сгруппировать в другой массив? Чтобы получился массив массивов
-
-
max_threads=1 max_block_size=10000
-
Так это какая версия ?
-
такое же поведение
-
а версия КХ ?
-
【D】【J】 in ClickHouse не тормозит
~2500 bytes per row... все правильно, вы в доку не туда смотрели. вот эти дефолты надо менять (уменьшать). И все будет хорошо. у вас минимум по ляму строк вставка - т.е. 2.5 * 10м * 8 (мой магический фактор расфигачивания в памяти) min_insert_block_size_rows 1048576 min_insert_block_size_bytes 268435456
-
да помогло, спасибо! Я прописал пользователю, а после вашего коментария поправил на профиль и все взлетело, пасибо!
-
нет. при max_block_size=10000, по 10тыс будет вставка, тут вообще проблема возможно с новой версией КХ и другое поведение jemallok - threads. Попадаем на другой тред в тредпуле, и память отжираем для запроса, а тред который выполнял предыдущий запрос сидит курит с кучей памяти.
-
не не, я тестил вот прям седня перепроверил + дока говорит прямо
Устанавливает минимальное количество строк в блоке, который может быть вставлен в таблицу запросом INSERT. Блоки меньшего размера склеиваются в блоки большего размера. -
-
а ну да там из-за min_insert_block_size_rows Squash blocks
-
-
это не объясняет почему памяти не хватает через несколько итераций
-
Подскажите еще пожалуйста, что может быть не так с "Received exception from server (version 20.1.3):
Code: 306. DB::Exception: Received from 127.0.0.1:9000. DB::Exception: Stack size too large. Stack address: 0x7f4d3dfff000, frame address: 0x7f4d3e3fefe0, stack size: 4194336, maximum stack size: 8388608." запрос "SELECT * FROM table_name LIMIT 1"? -
Да, тут вы правы, особенно при ручных вставках по 6 тыс строк
-
А у вас движок ведь MergeTree? Не Memory?
-
И первая таблица никак не связана со второй?
-
Помогите плиз возможно ли решить такой кейс:
в БД ноды есть N-ое кол-во таблиц и N-ое кол-во распределенных представлений над ними.
Возможно ли установить права для пользователя таким образом, чтобы пользователь видел только представления?
Выдавать на каждую таблицу/вьюху права отдельно не представляется возможным. -
У меня обычно мердж кикается вроде сам начинается после 4 инсерта в эту же таблицу ) может он начинает кушать память
-
первая и вторая таблица структурно одинаковы кроме поля time которое поменло тип. Между собой они не связаны никак
-
А вы можете после каждой вставки смотреть в system.merges, и если идет мердж чуток подождать? В целях эксперимента
-
table_name -- это вью которое читает само себя?
-
нет, обычная таблица с данными
-
а какая у Вас мысль?
-
create view x(A Int64) as select 1 from x;
select * from x limit 1
DB::Exception: Stack size too large. Stack address: 0x7ff9da37a000, frame address: 0x7ff9da777fc0, stack size: 4202560, maximum stack size: 8388608. -
Получилось подключиться?
-
Если оставляю только селекты без втавки - тоже потихоньку выедает память и падает. Медленнее, но итог один
-
после каждого селект
select * from system.asynchronous_metrics where metric like '%MarkCacheBytes%' -
Joined.
-
MarkCacheBytes 2783713920 и не меняется
-
Joined.
-
Да, спасибо
-
Тут описал
-
спасибо
-
Joined.
-
Joined.
-
у вас селект всегда с одинаковым количеством строк?
можете поставить
——
SELECT
time,
...
FROM table1
where time=XXX
LIMIT 6000
—-
и посмотреть выедается ли память ? -
Да у меня селект с одинаковым количеством строк, да там лимит написан. Да - память отжирается
-
А можно код посмотреть?
-
Код селекта?
-
Ага
-
Да такой же как выше, только вместо многоточия от 100 до 150 полей
-
Зачем вам это на ночь глядя, ейбогу
-
-
-
ClickHouse server version 20.4.4 revision 54434.
-
ну хорошо, прям завтра эт у нас точно не будет...
а вы с повторением абсолютно идентичного запроса тестировали?
может просто данные раскиданы на большее число блоков, на том запросе который фейлится -
да - запрос идентичный. Данные в базу новые не попадают
-
-
-
привет
кто-нибудь может подсказать, почему при одинаковой выборке из двух таблиц, в одной из которых тип данных Enum8, а во второй LowCardinality(String), при одинаковом кол-ве прочитанных строк, прочитанных данных по объему больше в случае с Enum
он же по идее должен быть 1байтным, а словарь 4байтным? (уникальных значений всего 6)
Пример запроса и результатов:
SELECT field FROM table group by field order by count()
LowCardinality: 0.59 sec.| 215,835,807 rows.| 206 MB
Enum8: 0.51 sec.| 215,835,967 rows.| 1 GB
P.S. пробовал тот же трюк на других полях (тоже Enum и LowCardinality, всегда разница в объеме +- в 5 раз) -
Joined.
-
Joined.
-
Joined.
-
Апну проблему. 20.4.4.18. Похожая ошибка при принудительной оптимизации партиции ( Раньше такого не наблюдалось
-
Походу надо баг заводить :(
-
Вскрытие показало, что без FINAL оптимизация таки работает optimize table <table> partition '2020-06-01' deduplicate
- 02 June 2020 (225 messages)
-
сделайте tcpdump -i any port 3306 -w mysql.pcap на сервере где clickhouse
и посмотрите что происходит с авторизацией
это сильно похоже на то. что MySQL8 у вас с обновленным механизмом авторизации
который возможно не реализован в clickhouse
если не трудно заведите issue на github? -
Доброе время суток. Подскажите как принудительно завершить выполнение запроса? Делал через KILL QUERY, но вот уже как 15 минут прошло, а запрос еще висит.
-
Joined.
-
KILL QUERY ... WHERE ... SYNC
но KILL QUERY принудительно не завершает запрос, он только выставляет флажок который проверяется в треде исполнения запроса после того как очередной блок обработан, это может быть довольно долго ждать... -
Можно грохнуть процесс в ОС. terminate
-
А это не завалит весь CH целиком?
-
SYNC ведь просто будет держать консоль, ничего в плане более принудительной остановки он не делает?
-
В пятницу так сделали, были заблоченные select и DDL
-
Всё ок, сервер не завис и не перезапустился. Убили именно процесс который под select
-
19.15.3.6
-
Всем ПРИВЕТ !
-
SYNC делал, вот примерно 15-20 минут запрос убивался
-
ну да, он там ждет пока запрос дойдет до точки где его можно безопасно остановить.
-
-
не процесс а тред
через kill <thread_id> -
Это безопасно? не завалит CH целиком?
-
-
дак --pidfile или --pid-file ?
-
—pid-file
pidfile это имя -
Злравствуйте ещё раз. Есть 20.3.8.53 на двух узлах. Нужны идентичные. А сейчас LTS-ами стали v20.3.10.75-lts и v20.3.9.70-lts 8-\
-
я так не делал, я всегда KILL .. SYNC ждал окончания
-
-
Joined.
-
Ребят, привет! А чем вот эта проблема решилась? у меня опять воспроизводится, на последней версии кликхауса
-
Вот этим
-
Интересно, что вся функциональсность чтение/запись/удаление по партишенам, все работает, а мутации не работают после одной успешно прошедшей мутации
-
все уперлось в зукипер и там и умерло?
-
Нет с ним все было хорошо
-
Все остальные запросы выполнялись без проблем
-
еще я пробовал переналивать таблицу идентичную
-
в новой таблице все работает
-
проблема не в данных, видимо
-
Так а в чем проблема? Там несколько параллельных версий. Выбирай ту которая нравится и наливай.
-
Была такая ситуация, тогда только появился этот функционал, запускаешь клик.сервер начинаешь работать поначалу все норм работает, удаляет поля. Но через некоторое время, все "перегревалось" и переставало работать, помогал только перезапуск. Поэтому я отказался от этих запросов и до сих пор не использую
-
перезапуск чего?
-
кликхауса?
-
да
-
интересно
-
ну тогда надо баг репорт заводить
-
зукипер я перезапускал, проблема продолжала воспроизводиться
-
Лентяй я - не хочу искать почему минорную версию повысили. Но заповеди (работает - не трожь) - тоже важно.
-
кликхаус мы тоже вчера перезапускали, сразу после рестарта проблема тоже воспроизводится
-
если память мне не изменяет я тогда issue заводил
-
Спасибо, буду смотреть. Что интересно вручную запросом SYSTEM RELOAD DICTIONARIES обновляются
-
Добрый день. Подскажите, пожалуйста, как развернуть два массива одновременно, что бы порядковый номер значения одного массива соответствовал порядковому номеру другого?
Есть условно ['a', 'b', 'c'] и [100,101,102], как получить
a 100
b 102
c 103
? -
ARRAY JOIN arr1 as a, arr2 as b
-
ой блин =) фигасе, забавно
-
это очень странно тем более... надо смотреть что там на уровне протокола
-
Спасибо, помогло!
-
Да, всё так, оговорился. Спасибо
-
попробую еще раз, мало ли:D
кто-нибудь может подсказать, почему при одинаковой выборке из двух таблиц, в одной из которых тип данных Enum8, а во второй LowCardinality(String), при одинаковом кол-ве прочитанных строк, прочитанных данных по объему больше в случае с Enum
он же по идее должен быть 1байтным, а словарь 4байтным? (уникальных значений всего 6)
Пример запроса и результатов:
SELECT field FROM table group by field order by count()
LowCardinality: 0.59 sec.| 215,835,807 rows.| 206 MB
Enum8: 0.51 sec.| 215,835,967 rows.| 1 GB
P.S. пробовал тот же трюк на других полях (тоже Enum и LowCardinality, всегда разница в объеме +- в 5 раз) -
попробуй сравнить размер колонок в system.columns
-
-
-
словари не кастятся в числа
-
размер колонок тоже проблематично сравнить, одна таблица - подмножество второй, сравниваю все по партициям, а в columns таблице нет такой возможности
-
я про enum
-
с енамом тот же результат, что и без каста
-
Есть parts_columns
-
добрый день, подскажите, как правильно полностью удалить данные о zookeeper. Были убраны все движки Replicated и удалены пути зк, сервер остался один, без реплик
в логе -
Coordination::Exception: All connection tries failed while connecting to ZooKeeper
в конфиге данные о кластере и зк закоментировал -
спасибо! пойду смотреть)
-
Рестартовали кх?
-
да, но только после того, как убрал данные из .sql , после изменения конфига не рестартовал
-
Кх не применяет изменения конфига зк без рестарта
-
понял, спасибо
-
-
ngram индексы только есть
-
-
-
-
Привет, подскажите как лучше оргинизовать в Clickhouse хранение событий с разными параметрами? Те у них есть общая часть и у каждого что-то свое. Изначально хотелось положить различающиеся параметры в одно поле в виде json, но Clickhouse, как я понял, не позволяет делать выборки по таким колонкам.
Нашел статью от баду, они хранят ключи и значения в массивах, а потом изгаляются и строят графики: (https://habr.com/ru/company/badoo/blog/442616/). Так принято делать? Или есть более правильные варианты?Разгоняем обработку событий до 1,6 миллионов в секундуКогда участники HighLoad++ пришли на доклад Александра Крашенинникова, они надеялись услышать про обработку 1 600 000 событий в секунду. Ожидания не оправдались… Потому что во время подготовки к...
-
Есть тип Nested, в нем можно сделать key-value пары. Почти те же массивы, но по крайней мере со слабой гарантией консистентности: https://clickhouse.tech/docs/ru/sql-reference/data-types/nested-data-structures/nested/Nested | Документация ClickHouse
Nested Nested(Name1 Type1, Name2 Type2, …) Вложенная структура данных - это как будто вложенная таблица. Параметры вложе
-
Привет! Подскажите, есть в Clickhouse возможность ограничения размера таблицы? То есть я могу поставить для таблицы TTL, чтобы ограничить время хранения. А есть ли возможность аналогичной настройки для размера таблицы в гигабайтах?
-
-
Joined.
-
позволяет, jsonExtract , парсим джейсоны в select, только работает в 1000 раз медленее чем просто колонка
-
нет такой возможности
-
Ок, а как делать правильно?) Создавать таблицу для каждого события?
-
что такое "count по времени" ?
select count() с, http_path
...
group by http_path
order by c desc
limit 50 -
Ребят, привет.
Хотел спросить по поводу алгоритма выполнения функции toStartOfInterval. Может быть кто-нибудь сталкивался.
Обратил внимание, что для третьей недели сбивается группа и возвращается не первый день первой недели.
Первый день первой недели, на сколько понимаю, должен быть 2019-12-30.
Опять-таки, если и вернул 2019-12-23, то почему на следующих вычислениях повторяется возврат той же даты только один раз.
Мне казалось, что правильным бы было вернуть три раза подряд 2019-12-23. -
Запрос:
select addWeeks(toDateTime('2020-01-02 02:15:22'), number) as dttm,
toInt8(formatDateTime(dttm, '%V')) wn,
toStartOfInterval(dttm, interval 1 week) w1,
toStartOfInterval(dttm, interval 2 week) w2,
toStartOfInterval(dttm, interval 3 week) w3,
toStartOfInterval(dttm, interval 4 week) w4
from numbers(12)
order by dttm
; -
просто таблица с 800 колонками, там все события, всех типов
-
count по времени во временном интервале: group by t где t - например округление до минуты/часа/..
-
и что для каждого часа надо топ50?
select count() с, http_path, toStartOfHour(time) h
...
group by http_path,h
order by h, c desc
limit 50 by h -
Ок поясню, строю график по времени. Нужно отсечь рандомный мусор. Сейчас отсекаю через having count > N, хочется весь отсечённый мусор показать как overs
-
не подойдет?
group by field1…fieldn with totals -
трехнедельный интервал начался не 30, а 23, все правильно работает
-
With totals, заценю, спасибо!
-
пипец вы обсъяняете, как будто с инопланетянами общение
нихера не понял -
Сорян, кинул бы sql, но не за ноутом. Спасибо!
-
Спасибо.
Получается, что расчет интервалов начинается с 1970 года -
поэтому и значения разные могут быть.
-
-
-
Joined.
-
Joined.
-
Joined.
-
-
на гитхабе? не подскажешь ссылочку? я попытался найти, но не осилил
-
Joined.
-
там проблема была в кол-ве партов, в таблице было 105000 тыщ партов, и мутацию такой таблицы сделать нельзя by design
-
@den_crane подскажи пожалуйста в какой величине в system.query_log поле memory_usage?
-
desc system.query_log
-
аа, в байтах
-
спасибо 🙂
-
Ребят привет, есть какие то уникумы, которых допустили в продакшновый кластер, а они начали делать на огромной таблице дистрибьютед запрос
select * from db.big_table order by event_time limit 1. Без использования индексной колонки stats_day, которая служит собственно для отсечения лишних не нужных дней из базы. У кого нибудь есть экспертиза как по рукам давать таким людям в техническом плане? Прописать может чего? И куда если чего?) -
а сколько считается много? я видел, что 10к, у меня сейчас 10.5к
-
зависит от длины имени парта
-
ошибка какая в КХ, какая в ЗК ????
-
да есть возможность запретить query если не указаны определнные поля в where
-
force index by date
-
-
Ага, я кстати беру в расчёт этот параметр как вариант
-
в ЗК ошибок нет,
в КХ каждый раз логируется 25 Error'ов, начиная с такого:
void Coordination::ZooKeeper::finalize(bool, bool) - 2020.06.02 16:01:50.151518 [ 3535710 ] {} <Error> void Coordination::ZooKeeper::finalize(bool, bool): Poco::Exception. Code: 1000, e.code() = 107, e.displayText() = Net Exception: Socket is not connected, Stack trace (when copying this message, always include the lines below):
0. Poco::IOException::IOException(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x10421930 in /usr/bin/clickhouse
1. Poco::Net::NetException::NetException(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x102dfc5d in /usr/bin/clickhouse
2. ? @ 0x102fd743 in /usr/bin/clickhouse
3. Poco::Net::SocketImpl::shutdown() @ 0x102f9020 in /usr/bin/clickhouse
4. Coordination::ZooKeeper::finalize(bool, bool) @ 0xde0e130 in /usr/bin/clickhouse
5. ? @ 0xde14de1 in /usr/bin/clickhouse
6. ? @ 0xde0ec80 in /usr/bin/clickhouse
7. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x902526b in /usr/bin/clickhouse
8. ? @ 0x9023753 in /usr/bin/clickhouse
9. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
10. __clone @ 0xfe8dd in /usr/lib64/libc-2.17.so
(version 20.4.4.18 (official build)) -
зк на отдельном хосте? диски у ЗК ssd ?
-
ssd, но на тех-же хостах где КХ. нагрузка на него мизерная
-
Всем привет ) Коллеги, а проясните пожалуйста по интеграции с мускулем: https://clickhouse.tech/docs/ru/engines/table-engines/integrations/mysql/
Я правильно понял из доки, что это штатный инструмент для перегона данных из мускуля в клик ?
Изначально задача такая: система на мускуле получает около 20к заказов в сутки, клик выбран для хранения истории постройки различных отчетов. Но задача которую я пока не понимаю как решить это периодическое пополнение клика данными без дублирования записей. Для простоты можно считать 15-20 записей в минуту приходит в системуMySQL | Документация ClickHouseMySQL Движок MySQL позволяет выполнять запросы SELECT и INSERT над данными, хранящимися на удалённом MySQL сервере. Созд
-
чего то я потерял нить, я думал я отвечаю @ukchuvrus
-
все ок мы с ним вместе с этой проблемой разбираемся
-
ошибка в ЗК должна быть, или он вообще отвалился
-
нет ничего, проверял все ноды, в логах чисто..
-
2020-06-02 19:01:50,148 [myid:2] - WARN [NIOWorkerThread-20:NIOServerCnxn@373] - Close of session 0x2011cea53870008
java.io.IOException: Len error 1709078
at org.apache.zookeeper.server.NIOServerCnxn.readLength(NIOServerCnxn.java:541)
at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:332)
at org.apache.zookeeper.server.NIOServerCnxnFactory$IOWorkRequest.doWork(NIOServerCnxnFactory.java:522)
at org.apache.zookeeper.server.WorkerService$ScheduledWorkRequest.run(WorkerService.java:154)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748) -
и это только в случае мутации?
-
да, а удаление, например, по партишенам - работает
-
ясно, логично
-
надо смотреть что там в коде зукипера, java.io.IOException: Len error , я вообще не знаю что это и никогда не. видел такой ошибки
-
у Гурама была другая
-
-
это я читал, 10тыс. мне кажется совсем немного
-
хотя надо смотреть в зк, сколько там
-
@den_crane
Не подскажете настройки логирования, чтобы сервер перестал в логи писать пароль в открытом виде при подключении к нему по JDBC?
Пример:
2020.06.02 16:17:06.953423 [ 21955 ] {} <Trace> DynamicQueryHandler: Request URI: /?password=мой_пароль&database=db&extremes=0&session_id=DataGrip_2d9a5daf-9f4c-4837-83af-e01e574e938e&compress=1&user=test_usr -
нет, в гитхабе ищите, там что-то было
-
Благодарю))
-
байты
-
https://clickhouse.tech/docs/en/operations/settings/query-complexity/#max-rows-to-read
отдельный профиль выделить для таких людей с ограничениямиRestrictions on Query Complexity | ClickHouse DocumentationRestrictions on Query Complexity Restrictions on query complexity are part of the settings. They are used to provide saf
-
Joined.
-
кто яндекс.облаком пользуется, подскажите - пропали исторические данные по метрикам Queries в вебморде с 26ого мая, при этом сами значения уменьшились в 5-6 раз (было 18 инсертов и 260 селектов в секунду, стало 3 инсерта и 40 селектов), при этом 27ого был переход на версию 19.14 с 19.13, никто с подобным не сталкивался?
-
ну и обрыв метрик так выглядит
-
метрики случаем не в metrics_log хранятся?
-
я не знаю как в облаке это организовано, остальные метрики не задеты
-
просто при некоторых обновлениях клика, старая таблица переименовывается в metrics_log_0
из за изменения схемы -
лучше спросить у поддержки яндекса
-
я спрашиваю просто в разных источниках, чтобы поточнее понять, тп чаще всего в документацию посылает к сожалению
-
-
обновление на день позже произошло, точнее, то что метрики поменялись заметили только сейчас. исторические данные только этой метрики есть начиная с 26ого мая, а обновление было 27ого мая
-
Подскажите, пожалуйста, есть в КХ аналог строковых функций LPAD и RPAD?
-
с помощью repeat/concat/length можно реализовать
-
-
о! спасибо за наводку!
-
я знаю ответ, вы что хотите сделать?
оторвать навсегда? на время? переделать в TO ? -
от какой кстати таблички, от from или от to ?
-
оторвать навсегда и приатачить другую
-
входную или выходную?
-
-
выходная явная to или неявная .inner ?
-
.inner
-
detach table MVname
rename table ".inner.MVname" to MVname_old, somenewtable to ".inner.MVname"
attach table MVname -
спасибо!
-
How to convert not replicated MV to replicated https://gist.github.com/den-crane/80cb95e74f046be2d8ffae58d9b04e8f
How to alter MV https://gist.github.com/den-crane/431010ca08b9e51b960e55344b1dbbe3
MV_poplulating_with_freeze https://gist.github.com/den-crane/64c05be67ef8a926242011188ce96f44
Several_MV_one_internal_store https://gist.github.com/den-crane/005633470c70877dd28c00211cd9fcfb
Populate AggregatingMergeTree through null table https://gist.github.com/den-crane/f7382cd4f1f859ff6ac46afe7dc9925a
alter_MV_with_SummingMergeTree https://gist.github.com/den-crane/3a8d57253711e277b2a60a75b5dfeef6
Rename MV in CH before 19.8.3.8 https://gist.github.com/den-crane/d9a0bceb58a7d5314ea66e8edbebc9f7 -
-
-
-
-
-
-
-
-
-
Может кто то подскозать куда заглянуть на тему Code: 306, e.displayText() = DB::Exception: Stack size too large. Stack address: 0x7f17cfeff000, frame address: 0x7f17d02ff450, stack size: 4197296, maximum stack size: 8392704 (version 20.3.5.21 (official build)) ?
-
а где и как ты такое получил то?
-
ответ на попытку вставить данные с помощью smi2/phpClickHouse пачкой в 400 записей
-
что то очень странное.
в идеале получить минимально воспроизводимый пример и на гитхаб скорее всего -
слабо представляю как это воспроизвести, пока не сооброжу в кокую сторону поковырять (есть пару мыслей), но в целом думал может кто сталкивался с подобным
-
можно попробовать получить запрос, который формирует php драйвер(через брейкпоинты) и попробовать вставить через curl
-
Joined.
-
данные беру из rabbit и пачками по 400 записей отправляю с помощью smi2/phpClickHouse в 13 таблиц раз в минуту, на 2 из них стал получать данное сообщение, помню что ClickHouse не очень любит частые мелкие вставки, может это быть связанно?
-
раз в минуту для 13 таблиц это нормально
-
про те таблицы на которых падает можешь сказать, что нибудь?
-
очень широкие и тд?
-
подскажите в чем может быть проблема при запросе CREATE DATABASE db42 ON CLUSTER jake вываливается с ошибкой Watching task /clickhouse/task_queue/ddl/query-0000001147 is executing longer than distributed_ddl_task_timeout (=180) seconds. There are 3 unfinished hosts (0 of them are currently active), they are going to execute the query in background.. Кластеров много, много шардов и по две реплики в шарде. Но именно в кластере jake три шарда и по одной реплике. На всех хостах конфигурация одинаковая (я про конфиги). Доступ к ZK есть со всех хостов (проверял через telnet). В ZK создается запись о DDL запросе. Но сам запрос не работает не на одном хосте кластера. Проверил как остальные кластеры и там запрос работает. Может кто подскажет?
-
не на столько что бы уж большие, есть пару колонок с большим количеством текста от которых надо избавиться,
но есть подозрение что это просто мои кривые руки пытаются в консьюмере отправить всю очередь в 12к сообщений вместо 400 -
ну это не должно быть проблемой на самом деле 12к, 400 штук
-
@unamedrus в любом случае спасибо за мысли
-
тут проблема где то в другом месте
-
конфиг кластера такой
<yandex>
<remote_servers>
<jake>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ch1.domain.net</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ch2.domain.net</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ch3.domain.net</host>
<port>9000</port>
</replica>
</shard>
</jake>
</remote_servers>
</yandex> -
a например ch1.domain.net что думает про свое имя? hostname -f ?
-
-
вы правы, все же консюмер пытается отправить только 400, отключил все таблицы но эти таблицы продложают выдавать то же саммое, на них так же есть материализованные представления, возможно что то там не нравится
-
можно показать запрос мат вью?
-
что то упаскаю я. это как то влияет, то есть когда хост сам себя пингует по своему имени 127? другие хосты в кластере его пингуют без проблем
-
CREATE MATERIALIZED VIEW reports.daily_events_ad_impression TO reports.daily_events
AS SELECT
1 as id,
mautic_id,
dictGetInt32('leads', 'allmedx_lead_id', toUInt64(mautic_id)) as allmedx_id,
assumeNotNull(name) as event_name,
'Ad Impression' as event_type,
if(isNotNull(query) AND query!='', CONCAT('Term: ', query), '') as event_data,
date_hit as event_date,
request_url as link,
'' as platform,
npi
FROM (
SELECT
dictGetInt32('site_user_info', 'npi', toUInt64(user_id)) as npi_a,
dictGetInt32('leads', 'npi', toUInt64(mautic_id)) as npi_m,
IF(assumeNotNull(npi_m) > 0, npi_m, npi_a) as npi,
*
FROM mautic.revive_view
) -
хост на котором вы запускаете берет из того конфига что показали имена хостов, и кладет в зукипер задания, т.е. в кластере jake есть ch1.domain.net, в зукипере для него появится строчка ch1.domain.net:900 делай то, ch1.domain.net проверяет, опа мне надо сделать то , выполняет ....
-
вроде особого нет криминала.
хотя есть словари.
попробуй детачнуть вью и опять вставить -
assumeNotNull(npi_m) > 0
это проверка на положительность npi_m? -
без изменений
-
нужны не null больше 0
-
если я правильно понял текст )) КХ обращается к адресу 127…:9000, а сам висит на другом адресе (в моем случае на внутренней сети)?
-
@unamedrus получил новенькое:
Code: 76. DB::Exception: Received from localhost:9000. DB::Exception: Cannot open file /var/lib/clickhouse/data/mautic/revive_view/1557766800_45310_45310_0_48966/revive_user_id.null.mrk, errno: 23, strerror: Too many open files in system: While executing MergeTree. -
ну это уже другое дело.
-
уже что то)
-
это всякие ulimit -u ulimit -n
-
и слишком маленькие парты почему то
-
спасибо, заработало ))
-
select database, table, count() from system.parts WHERE active GROUP BY database, table
-
дневные партации у таблицы куда представления переливают
-
спасибо, видимо с этим предеться разобраться - https://prnt.sc/ssm7ciScreenshot
Captured with Lightshot
-
дневные партиции это достаточно редкий кейс
-
на самом деле кол-во партов не должно влиять никак
вот дневные, и даже часовые партиции есть на этом сервере
lsof -p 11715|wc -l
333
SELECT count()
FROM system.parts
┌─count()─┐
│ 17259 │
└─────────┘ -
я думаю какая-то бага в 20.3 последних, потому что несколько раз за последние 2 недели пришли с "Too many open files" и Stack size too large
-
Too many open files in system больше нет, но при вставке все то же сообщение
-
df -i /var/lib
что выдает? -
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 165150720 2407595 162743125 2% / -
как оказалось кол-во столбцов я приукрасил, в одной 20 во второй 43
-
Я бы на самом деле действительно попробовал обновится, мало ли что
-
без изменений к сожалению
-
Code: 306, e.displayText() = DB::Exception: Stack size too large. Stack address: 0x7f4a7afff000, frame address: 0x7f4a7b3fd640, stack size: 4204992, maximum stack size: 8392704 (version 20.4.4.18 (official build))
-
ну тогда бы вытащил SQL запрос из пхп(до этого поигрался бы с объемом батча) и начал бы мучать через curl
-
можно еще создать копию таблицы и попробовать вставлять в нее
-
уже в процессе, спасибо
-
Здравствуйте! Подскажите, кто либо запускал на macOS в вагранте docker-compose с кликхаусом? Не было проблем с прекдиванием волюма?
clickhouse:
image: yandex/clickhouse-server
volumes:
- ./var/docker/clickhouse:/var/lib/clickhouse
ports:
- 8124:8123
- 9001:9000
у меня почему-то падает контейнер -
теперь все таблицы решили не вставлять ничего)
-
все же проблема с представлением, можно ли переливать из таблиц данные в таблицу по средством MATERIALIZED VIEW … TO … и навесить еще одно представление к конечной таблицы что бы из нее переливать в другую таблицу?
-
да, можно, каскады работают
надо во втором MV написать from либоTOтаблица_либо_inner -
зачем у вас select from select в MV ?
в смысле можно написать if(. (somefunc as X) > 0, X -
assumeNotNull не нужен, dictGetInt32 не может вернуть null
- 03 June 2020 (296 messages)
-
Вопрос по clickhouse-copier
У меня есть две таблицы на одном хосте с одинаковой стуктурой
events и events_test
В таблицах есть поле
_date Date MATERIALIZED toDate(time),
По нему идет партиционирование
ENGINE = MergeTree
PARTITION BY toDate(_date)
ORDER BY (time, class)
SETTINGS index_granularity = 8192
При попытке копирования из events в events_test :
2020.06.03 03:33:57.506690 [ 18248 ] {} <Debug> ClusterCopier: Checking shard N1 (having a replica 127.0.0.1:9000, pull table mybase.events of cluster source_cluster) for partition '2020-06-01' existence, executing query: SELECT 1 FROM _local..read_shard_0.destination_cluster.mybase.events_test WHERE (toDate(_date) = ('2020-06-01' AS partition_key)) LIMIT 1
2020.06.03 03:33:57.508538 [ 18248 ] {} <Error> ClusterCopier: Will retry: Code: 47, e.displayText() = DB::Exception: Missing columns: '_date'
Это норма? -
-
Спасибо!
-
когда планируется фикс?
-
-
Joined.
-
-
почему с точкой?
-
относительный путь.
я заметил что у меня там права пользователя 1000:1000 -
-
@docker_ru
-
Подскажите пожалуйста, будет ли для кликхауса разница (в основном интересует скорость индексации или ещё какие-то ньюансы, которые могут возникнуть), буду я делать записи в рамках примерно одинакового таймфрейма (CreatedAt записей монотонно увеличивается) или буду добавлять пачками записи, где CreatedAt будет размазан, например, сразу на год? К примеру, есть действия пользователя. Обычно они пишутся по факту возникновения. Но мне нужно записать в бд сразу все действия пользователя, сделанные за год.
-
-
Насколько я знаю, во много партиций сразу писать не очень рекомендуется, скорее всего, это будет медленнее. Кроме того, есть ограничение дефолтное на возможность записать за раз в максимум 100 партиций
-
Спасибо. Надо попробовать. Одновременно 100 партиций — это, пожалуй, перебор. Но у меня особенность генератора данных — он генерит сразу все данные по одному юзеру за всю историю его сессий, пишет в бд, затем переходит к другому, из-за этого и затрагивается сразу много партиций.
-
ну они не сразу а во время мержа у вас будут затронуты потому что сортировка идет по ключу следовательно надо пересортировать, ну а там зависит уже от скорости дисков, размера данных
-
Зависит от партиционирования и ключа сортировки.
Если данные сортированные льются, мержи будут проходить быстрее.
Что касается партиций, если сразу льете во множество, то будет создаваться по парту на каждую партицию, это будет достаточно сильно влиять на IO. -
-
в клике есть временные окна - buffer tables )) оттуда можно вставлять отсортированными
-
Почитал, это чуть другое. Буферизировать я могу в генераторе, я это и делаю. Я имел в виду, что мне нужно в идеале писать всё во временном окне/в одной партиции, чтобы работало, как в реальности, а для этого нужно хранить все сессии всех пользоватей в памяти, что очень и очень накладно.
-
вы можете вставлять в буферную таблицу в каком угодно порядке, а когда оттуда вычитываете через INSERT INTO SELECT делаете ORDER BY по ключу
-
имхо это сильно проще чем делать это в генераторе
-
да и в общем и целом мне кажется стоит просто попробовать вставить в клик как вам удобно - возможно что на ваших объемах / железе вы и не почувствуете разницы
-
здравствуйте, подскажите, можно ли запросить выборку из определенной партиции? мне известно примерное время, однако, при запросе
where time='2019-06-18 16:03:18'
оно лопатит все данные, хотя логика подсказывает, что можно искать в партиции за данный месяц -
-
гм, не указываю при запросе, есть разница?
-
-
в структуре? date
-
ENGINE = MergeTree(date, (---, --, --), 8192)
-
ну поскольку у вас переход на новую версию
то это уже новые инстансы кликхауса и поэтому у вас уже новые метрики с новыми labels показываются, не важно где это хранится
а насчет того что показатели упали, ну это же к вашему clickhouse запросы идут
вы их в приложении никак не можете проверить? чтобы точно знать,
возможно эти вещи никак не связаны -
-
ага, тогда оно по немувыберет :) класс. спасибо, попробую
-
всем привет
кто нибудь знаком с такой метрикой как QueryPreempted ? в ClickHouse? -
-
тут есть репутация?
-
/stat@combot
-
ей никто не пользуется
-
-
ну и ладно) человеку спасибо, за прозрение
-
А можно узнать примерно сколько полей в таблице считается нормальным/средним для клика? насколько здоровая ситуация если в таблице 900 полей?
-
это уже близко к верхнему разумному пределу, из того что я слышал
-
Доброго всем.
В запросе есть 22 поля, которые высчитываются как toDecimal64OrNull(column, 4)
Очень часто при выполнении запросы возвращается ошибка
Code: 32, e.displayText() = DB::Exception: Attempt to read after eof: Cannot parse Decimal(18, 4) from String, because value is too short (version 19.15.3.6 (official build))
Можно ли как-то определить какое именно поле/значение ему не нравится?
Пробовал увеличивать precision, исключать поля - всегда ошибка остается в подавляющем большинстве запросов -
разве он не должен просто возвращать Null а не кидать exception?
-
-
добрый день
не подскажите как в clickhouse написать подобную конструкцию:
COALESCE(field1::text, '') || '_' || COALESCE(field2, '')
спасибо -
-
concat(COALESCE(toString(field1), ''), '_', COALESCE(feild2, ''))
-
вот так
-
Коллеги, всем привет. Столкнулся с проблемой, есть поле в таблице Nullable(DateTime), в каком виде должна быть запись в csv для вставки значени null в это поле?
-
empty field не делает null?
-
Расшифруй?
-
пустое значение поля
-
-
У меня после это выглядит так даныее через зпт,''
-
ну имхо если ,"", то это пустая строка
-
а если ,, то пустое поле
-
Вот это проконало, осталось из Oracle выгрузить в таком виде
-
Скажите пожалуйста, а разница в используемой памяти в 200 раз при arrayIntersect(arr, sm) и arrayCount(a -> has(sm, a), arr) это нормально?
Синтетическсий запрос с интерсект использует 5мб, а с arrayCount - 1037мб
select sum(len)
from (
select
length(arrayIntersect(arr, sm)) as len
-- arrayCount(a -> has(sm, a), arr) len
from (
select arr, range(val) as sm from (
select range(1000) as arr
)
array join arr as val
)
) -
Спасибо )
-
Сейчас проверю )
-
Joined.
-
Joined.
-
Всем привет, подскажите куда копать если имею такую ошибку
Can't OPTIMIZE by some reason -
в error log :)
может и сюда
https://t.me/clickhouse_ru/95512Felixoid 🚜🇩🇪 in ClickHouse не тормозитхм... похоже, что он не может отловить "merge already in progress". Печаль. SELECT count() FROM system.merges WHERE (database = 'graphite') AND (table = 'data') AND (partition_id = '201903') ┌─count() ─┐ │ 2 │ └─────────┘
-
should be - Can't OPTIMIZE FOR some reason ))
-
Joined.
-
Всем привет, почему CH может не пускать локально с того же сервака в clickhouse-client ?
Code: 210. DB::NetException: Connection refused (localhost:8123, ::1) -
listen host какой?
-
netstat -natp | grep LISTEN
-
2958
-
мб localhost не localhost) мб не слушает на локальной ip, ch не запустился до конца (загружает данные о таблицах) - вариантов несколько
-
Я вот тоже напроектировал себе схему, там не 900 колонок, но около 400. В общем, надо загонять данные и тестить, только так. По занимаемому месту, по скорости запросов.
-
Joined.
-
-
я тестил с ~250 колонками, никакой особой разницы когда их было 16
-
-
ну тока перед этим надо оттеститься на данных +/- prod, чтоб понимать как быстро они будут работать и как себя будут чувствовать хосты во время их применения. А в остальном да, можно 😄
-
-
-
-
Всем привет, нужно сделать выборку для гистограммы с группировкой по диапозону от выбранного 0 до выбранного прайса ( сложить все X ) , и пока не приложу ума как это сделать
Запрос такого типа
SELECT price,
count() as x
FROM table
GROUP BY price
ORDER BY price ASC -
Это админстративные операции. их нельзя использовать как замену update/delete
-
-
они как то не так удаляют?)
-
-
Объемы, главное объемы и IO промониторьте.
Работают они сильно иначе чем привычные update/delete в реляционных бд.
Там происходит полная перезапись всех затронутых данных. -
именно
-
Во втором случае в лямбду передается размноженная копия массива sm
-
-
В лямюду передаётся копия массива, а не ссылка на него? Грустно. Так во всех лямбдах происходит?
-
в общем случае среднестатистический пользователь CH для удаления использует drop partition.
Если нужен update/delete то обратите внимание на движки replasingmergetree/collapsingmergetree -
да
-
у меня партишн помесячно, а данные пишутся ежедневно, я не думаю что есть смысл делать партици по дням? в день там +- 30 лямов падает записей
-
зависит от того сколько лишнего вы можете держать и каким объемами будете удалять.
Ну т.е. если вам удалять месяцами ок, то держите месяцами. Если нет, и надо чаще, то неделями.
Днями может быть обратная сторона если долго хранить будете. Партиций будет много. -
arraySort?
-
-
да вот там такая ситуация, что удалений за день может несколько, и касаться они будут только текущего дня, как лучше поступить?
-
Я так понял мне нужно идти в сторону гистограмм ? просто выборку хочу сделать для графаны
-
-
Тогда обратите внимание на https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/collapsingmergetree/CollapsingMergeTree | Документация ClickHouse
CollapsingMergeTree Движок наследует функциональность от MergeTree и добавляет в алгоритм слияния кусков данных логику с
-
Блин. Я для отчёта выбираю события в несколько массивов по каждому юзеру по которым потом бегаю вычисляя нужные значениия. Получается каждый раз как я использую фильтерс и каунт у меня делается копия массивов. Понятно откуда у меня потребление в 250 гигов на один день. Что-то я как-то даже и не знаю что делать.
-
уже смотрел, но в таком случае все будет работать очень долго, так как количество данных может быть разное в базе и которое пришло, а судя по движку нужно быть очень точным в указании -1 and +1. Так что такой вариант ресурсозатратный, долго будут проверки идти((
Это мне нужно будет выбрать все, посмотреть разницу, поставить метки и сделать 2 инсерта... -
смотрите
если все столбцы одновременно за раз вставляются, то это да. будет напрягать
на каждый столбец условно говоря при вставке выделяются буфера для поточной записи где то мегабайт
900 мегабайт аллокаций на каждый INSERT за раз если все столбцы
и тоже самое при чтении. но там не так критично
но я так понимаю что вставляете вы только часть? остальное заполняется каким то дефолтным значением?
реального лимита на кол-во столбцов нет -
в любом случае спасибо, сейчас буду выбирать)
-
Я так понял тут избранным помогают ?) или никто гистограммы как делать не знает ? ( чет я через чур наглею )
-
Joined.
-
Вопрос мутный)
-
в графане есть примеры выборок вроде
-
-
Не подходит?
-
Подходит, только я не понимаю как 2+2 сложить вместе с этим гуглом ( уже видел )
-
кто увидел твое сообщение, могли не знать как делать.
кто знал как делать, мог не увидеть твое сообщение. -
Хотя если нужен тайм сириис то наверное не оно
-
Если вопрос не решился то можно и повторить его вечером, вдруг другие люди увидят
-
как раз таймсирис не нужен , X будет у меня Price, Y - количество которое должно увеличиваться , но никак не скакать ))
-
у тебя границы бакетов заданы?
-
Граница бакетов от 0 до price по которому идет выборка
-
Просто программируя на JS такое чувство что убью столько же времени чем найду запрос как это сделать
-
Можно регулировать max_block_size или запрос переписать
-
Я вот как раз думаю как переписать запрос, да. И что-то ничего не могу придумать
-
0|123456|price
0|12|34|56|price
все таки? -
Просто в колонках sumIf(a>3 and a<5), sumIf(a>=5 ...
-
Combinators | ClickHouse Documentation
Aggregate Function Combinators The name of an aggregate function can have a suffix appended to it. This changes the way
-
Это не подходит ибо значение не фиксированное для выборки ,оно равно price'у по которому идет выборка, грубо говоря countIf(price <= priceSelect)
-
ну так и подставляй в запросе?
-
Ну она лжет мне вроде как ...
SELECT price as priceSelect,
countIf(price <= priceSelect) as x
FROM x
GROUP BY price
ORDER BY price DESC LIMIT 10
┌─priceSelect─┬───x─┐
│ 0.216 │ 12 │
│ 0.1975 │ 39 │
│ 0.1792 │ 372 │
│ 0.175 │ 94 │
│ 0.15984 │ 1 │
│ 0.158 │ 28 │
│ 0.155 │ 6 │
│ 0.154 │ 31 │
│ 0.153 │ 1 │
│ 0.152 │ 12 │
└─────────────┴─────┘ -
X ведь только уменьшатся должен
-
-
-
вот с примерном стало яснее.
-
у тебя много различных цен?
-
К каждому шарду. Или on cluster
-
очень
-
это можно через arrayJoin сделать, либо через массивы
-
нарастающая сумма тебе нужна?
-
да
-
много сколько?
-
SELECT count() FROM (
SELECT DISTINCT price FROM table WHERE stats_day= today()
)
┌─count()─┐
│ 22506 │
└─────────┘ -
нарастающую сумму можно сделать несколькими методами либо через neighbor, но значение в ней сбрасывается на каждом блоке данных.
либо через массивы -
И если я правильно понимаю у меня запрос просто упадет от переизбытка по памяти ?
-
на самом деле необязательно
22506 float + столько же UInt32 как каунтер это не так страшно -
тут самое тяжелое это будет это дело сгруппировать, те твой первый запрос кмк
-
А можно подсказать сам запрос? а то в выборке по массиву я не знаю как сделать (каюсь)
-
SELECT price, cum_sum FROM (
SELECT
arrayCumSum(groupArray(x)) as cum_sum,
groupArray(priceSelect) as price
FROM
(SELECT price as priceSelect,
count() as x
FROM x
GROUP BY price
ORDER BY price ASC
)) ARRAY JOIN cum_sum, price -
типа такого
-
да вы волшебник , куда скидывать на пиво ?)
-
достаточно просто тоже помогать людям в этом чатике. :)
-
Чем смогу ) помогу
-
вареньем заносите ))
-
arrayJoin развернуть массив, тогда в лямбду будет передаваться значение а не массив, потом сверху сум / групбай
-
запускаю мутацию , мутация виснет и не выполняется, в error-логе ошибка
Code: 393, e.displayText() = DB::Exception: There is no query, Stack trace:
Полный трейс: https://pastebin.com/C0t1Ub8f
Что не так?..
Версия 19.17.8.542020.06.03 13:57:35.448567 [ 4 ] {} <Error> void DB::BackgroundProcessingPool::t - 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.
-
а как сама мутация то выглядит?
-
ALTER TABLE active_orders
DELETE WHERE order_id IN
(
SELECT DISTINCT order_id
FROM closed_orders
INNER JOIN
(
SELECT order_id
FROM active_orders
FINAL
) AS ao ON closed_orders.order_id = ao.order_id
ORDER BY order_id ASC
)
Ok.
0 rows in set. Elapsed: 0.376 sec. -
нельзя делать select в where у мутации
-
надо сложить результат вот этого запроса
SELECT DISTINCT order_id
FROM closed_orders
INNER JOIN
(
SELECT order_id
FROM active_orders
FINAL
) AS ao ON closed_orders.order_id = ao.order_id
ORDER BY order_id ASC
в таблицу, на таблицу сделать словарь и выполнить мутации where dictHas -
Спасибо!
Ну и костыль.... -
ахаха
-
но все еще смешнее, уже и этот костыль выпилили для репликейтид таблиц
-
А, то есть для Replicated таблиц это не сработает?
-
а потом добавили настройку, чтобы те кто понимает что делает могли все таки выполнить это
-
для Replicated таблиц надо добится чтобы на всех репликах словарь был полностью идентичный
-
иначе результат мутации на репликах будет различным, и будет ЖОООПАААА
-
-
мутации выполняются на всех репликах, чтобы результат мутации не передавать по сети.
-
есть у кого идеи?
у вас работают на 20.4 словари? -
тикет вам надо заводить, вот и все идеи
-
эх, неужели у всех сломались в 20.4 словари
спасибо -
словари конечно работают на 20.4
-
проблема в вашем окружении
-
как пользователь создан? с каким профилем? Тикет давайте с конфигами и логами
-
-
вполне возможно что никто не тестировал конфигурацию словари_через_xml + пользователь_через_create_user
-
-
да у меня была дичь со словарем. Думаю причина что файл словаря лежал в /etc/clickhouse-server а не /var/lib/clickhouse/user_files
спасибо 🙏 -
Хало!
Что за ошибка при попытке модифицировать столбец со структурой? Пытаюсь добавить ещё одно значение, а оно не добавляется
Есть такой столбец
src Enum16 (
'ga' = 1,
'ym' = 2
)
Пытаюсь дополнить его ещё одним значением
ALTER TABLE test.qq MODIFY COLUMN `src` Enum16(
'ga' = 1,
'ym' = 2,
'mail' = 3
)
Получаю ошибку
DB::Exception: Trying to ALTER key column src (version 20.4.2.9 (official build)) -
enum учавствует в ключе либо в partition by
-
вообще я руками редактируя метаданные расширял enum который учавствует в partition by
-
Да, enum участвует в партиционировании. И что теперь делать?
-
вообще это фиксили вроде бы
-
можешь создать таблицу с расширенным enum и аттачнуть парты к ней
-
Т.е., по сути, получается - создать новую таблицу и перезалить
-
ну перезалить это INSERT SELECT долго и мучительно
-
аттачнуть парты это бесплатно почти
-
Т.е. делаю новую таблицу с дополненным enum-ом, а затем циклом по всем партициям в исходной таблице делаю детач из старой и аттач к новой. А MOVE partition прокатит? Или опять хзче начнется
-
из старой необязательно детачить.
на самом деле там можно разными способами все сделать, все зависит от условий -
ATTACH PARTITION FROM¶
-
Всмысле? Одна партиция может принадлежать нескольким таблицам?
-
нет, будут созданы хардлинки
-
Ок, а какие могут быть "условия"? Просто интересно, чем следует руководствоваться в каких случаях
-
На самом деле, нужно всего лишь расширить енум. Т.е., по-другому - старая таблица будет не нужна
-
Но, тем не менее, узнать о других вариантах тоже интересно
-
ну самое примитивное, допустим у вас льются записи и запросы в эту таблицу. и желательно ничего из этого не потерять
-
тогда нужно будет сделать MAT VIEW которое будет копировать вставку в новую таблицу и только потом делать attach from
-
и потом сделать RENAME TABLE tbl TO tbl_old, tbl_new TO tbl;
-
Joined.
-
А в чём, вообще, разница между материализованным представлением и копией данных? Это, типа, как столбец с мутациями, только таблица?
-
Мат VIEW это триггер на инсерт, в данном конкретном случае он будет новые данные так же отправлять в другую таблицу
-
То есть, как я понимаю, последовательность действий следующая:
1. Создаю мат вью t_new с точно такой же структурой, но с изменённым столбцом src (дополнив enum новым полем)
2. Во всех скриптах, использующих t_old, я подменяю имя старой таблицы на новую t_new (с этого момента данные начнут литься в неё)
3. Прохожусь циклом по старой таблице, где
3. а) аттачу старую партицию к новой таблице t_new,
3. б) сразу же детачу партицию из старой таблицы t_old
Так? -
Как бы делал я:
1. Создают таблицу t_new
2. Создаю mat view TO t_new SELECT * FROM t (на этом этапе новые данные льются в обе таблицы)
3. Прохожусь циклом по старой таблице, где
3. а) аттачу старую партицию к новой таблице t_new,
4. RENAME TABLE t TO t_old, t_new TO t;
5. проверка, что все работает
6. DROP TABLE t_old; -
тэкс... надо переварить. Спасибо в любом случае
-
у меня КХ мирно крутился в докере последние несколько недель, а сегодня резко перестал реагировать на запросы, в логе вижу несколько таких ошибок после старта:
2020.06.03 16:11:08.938245 [ 1 ] {} <Error> Application: Listen [::]:9004 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = DNS error: EAI: -9 (version 20.3.10.75 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host> -
ipv6 погашен небось, а?
-
не знаю...
-
Joined.
-
Что у вас прописано в listen_host?
-
у меня это дело крутится в докере, с дефолтным конфигом
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host> -
sysctl -r disable_ipv6 net
-
И вот это проверить:
https://docs.docker.com/config/daemon/ipv6/Enable IPv6 supportHow to enable IPv6 support in the Docker daemon
-
Странно что в конфиге прописан локалхост, а ругается на [::]
-
Попробуйте <listen_host>0.0.0.0</listen_host>
-
Вместо ::1
-
а не, это я grep'ал.
На самом деле эта секция вообще закомменчена -
не помогло...
-
Возможно кто то подскажет, для того что бы обьеденить массивы в SummingMergeTree можно только использовать вариант с AggregateFunction?
CREATE … AggregateFunction(groupUniqArray,…
INSERT … groupUniqArrayState
SELECT … groupUniqArrayMerge`
Или есть какие-то еще варианты? -
И не должно. Вывело что?
-
net.ipv6.conf.all.disable_ipv6 = 0net.ipv6.conf.default.disable_ipv6 = 0net. - 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.
-
На хосте не выключено. В конфигурации докера?
Вообще, как правильно сказали выше, если ipv6 всё равно не используется, можно просто сделать в конфиге 0.0.0.0. -
сделал в конфиге 0.0.0.0, не помогло
-
файла /etc/docker/daemon.json нету
-
-
Попробовал MOVE PARTITION - не прокатило. Пишет
DB::Exception: Tables have different structure (version 20.4.2.9 (official build))
В доке на эту тему сказано
Таблицы должны иметь одинаковую структуру.
Для таблиц должен быть задан одинаковый ключ партиционирования.
Движки таблиц должны быть одинакового семейства (реплицированные или нереплицированные).
Для таблиц должна быть задана одинаковая политика хранения.
https://clickhouse.tech/docs/ru/sql-reference/statements/alter/#alter_move_to_table-partition
А у меня как раз партиционирование по тому ключу, который нужно изменить
Щас попробую аттач/детач...ALTER | Документация ClickHouseALTER Изменение структуры таблицы. ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ... В
-
Аттач тоже не прокатил
DB::Exception: Tables have different structure (version 20.4.2.9 (official build))
Какие ещё есть варианты? Инсертить че-то совсем не хочется... -
-
-
-
-
много партиций?партов?
-
Я бы сказал до хрена
-
Всего данных почти терабайт
-
создай вторую таблицу с идентичной структурой
-
Изначально заморочился с енумами для того, чтобы другим аналитикам было проще пользоваться, а не держать в голове, что означает 1, что 2, что 3. Т.е. для удобного формулирования фильтров в WHERE. И всем всё было удобно до сегодняшнего дня, пока не стало ясно, что надо расширять набор значений. Не ожидал от енума такой вот подляны...
-
Ну и плюс места меньше занимает
-
С идентичной - в смысле с такой же, но с расширенным енумом?
-
стоп, а у тебя какие изменения были между двумя таблицами7
-
1. создай вторую таблицу
2. аттачни туда парты
3. DETACH TABLE t_new
4. руками меняешь метадату новой таблицы /metadata/default/t_new и дописываешь новые значения
5. ATTACH TABLE -
Да особо никаких. Мне надо-то всего, чтоб у енума добавилось ещё одно значение
-
детачиться-то оно детачится (из старой), а вот в новую с расширенным енумом аттачиться не хочет
-
я так расширял enum сам
-
нет, таблицы полностью индентичны(не расширяй enum)
-
а потом уже будешь руками править файлы
-
А зачем тогда вторую таблицу делать, если у неё структура точно такая же? Может, проще мету в старой подправить?
-
просто перестраховка моя на самом деле
-
файлы-парты как-то надо переименовывать?
-
там есть файлик /columns.txt
я в нем тоже расширял enum -
ну делал это скриптом конечно
-
Т.е. тут в каждой папке надо переписать файл columns.txt?
-
да
-
-
тоже
-
И это всё, надо полагать, при остановленном сервисе
-
я думаю достаточно сделать detach таблицы
-
но из за hard link. мне кажется безопаснее будет удалить columns.txt и создать новый
-
что бы не поменять его в нормальной таблице
-
Разве можно таблицу отсоединить? Вроде, только части...
-
да, конечно можно
-
DETACH TABLE test.qq;
-
ClickHouse Documentation
Miscellaneous Statements ATTACH CHECK TABLE DESCRIBE TABLE DETACH DROP EXISTS KILL OPTIMIZE RENAME SET SET ROLE TRUNCATE
-
Привет! Подскажите, есть ли более грамотный способ извлекать значения по названию поля из строки
key="value str" key2=123
чем функция extract? Что-то аналогичное visitParamExtractString(params, name) -
из JSON ? JSONExtract
-
нет, это не json, а именно "key=value через пробел" формат (в syslog такой часто выплевывают в поле message)
-
For Searching in Strings | ClickHouse Documentation
Functions for Searching in Strings The search is case-sensitive by default in all these functions. There are separate va
-
Тогда вопрос - файлы columns.txt нужно именно править или достаточно отредактировать один и раскидать его копию по всем директориям с частями?
-
select extractAll ('key="value str" key2=123','key="(.*?)"')
┌─extractAll('key="value str" key2=123', 'key="(.*?)"')─┐
│ ['value str'] │
└───────────────────────────────────────────────────────┘ -
я правил каждый, но можно думаю и раскидать
-
Да, именно так и делаю. Вопрос был в том, есть ли более грамотный (быстрый) способ. Спасибо в любом случае.
-
Щас попробовал отсоединить таблицу, изменил columns.txt в нескольких папках, а остальные перенёс в /detached. Присоединяю обратно - всё завелось. Но почему-то, блин, в таблице остались не только те запчасти, которые я оставил, а и другие. Полез разбираться - выяснилось, что эти лишние он подтягивает с HDD. Совсем забыл, что у меня политика на два тома раскидывает =) Вопщем, надо будет и на втором диске то же самое делать... сколько нюансов надо учесть...
-
Changes of Enum in partition key don't work · Issue #7513 · ClickHouse/ClickHouse
From #2667. thanks @develar CREATE TABLE report ( `product` Enum8('IU' = 1, 'WS' = 2), `machine` String, `branch` String, `build_c1` String, `build_c2` String, `buil...
-
я поэтому заменил у себя enum на low_cardinality в partition by у меня там потихоньку сотню значений так пришлось бы добавить причем сразу на неск серверах.
-
Мы отказались от enum-ов вообще) UInt + TSV dictionary делаем
-
Полез разбираться - выяснилось, что эти лишние он подтягивает с HDD.
вообще это знак. что возможно этот файл только для справочной информации, но фиг его знает -
я не стал дальше углубляться в это
-
Всем привет!
Кто-нибудь пользовался http_handlers?
У меня с ним проблема.
Разкомментировал блок
<http_handlers>
<rule>
<url>/</url>
<methods>POST,GET</methods>
<headers><pragma>no-cache</pragma></headers>
<handler>
<type>dynamic_query_handler</type>
<query_param_name>query</query_param_name>
</handler>
</rule>
<rule>
<url>/predefined_query</url>
<methods>POST,GET</methods>
<handler>
<type>predefined_query_handler</type>
<query>SELECT * FROM system.settings</query>
</handler>
</rule>
<rule>
<handler>
<type>static</type>
<status>200</status>
<content_type>text/plain; charset=UTF-8</content_type>
<response_content>config://http_server_default_response</response_content>
</handler>
</rule>
</http_handlers>
Новая фича (/predefined_query) отрабатывает отлично, а вот стандартный HTTP интерфейс (как я понимаю за него теперь отвечает первое правило <url>/</url>) перестал работать:
# curl 'http://localhost:8123/?query=select 123'
curl: (52) Empty reply from server
в логах ничего в глаза не бросилось...
В чем может быть причина?
p.s. ClickHouse server version 20.4.4.18 (official build) -
Хочешь сказать, было достаточно изменить только этот файл?
/clickhouse/metadata/test/qq.sql -
ну если у тебя нормально подключились парты в которых ты не правил, то возможно
-
я это не проверял
-
Ок, понял
-
А тут, я так понял, багу они так и не закрыли?
-
это скорее фича, но нет - не закрыли
-
Всем доброй ночи. Я на маке использую контейнер с кх клиентом, подумал наверное можно маунтить файлик с query history, но не знаю где он. Можно такое провернуть вообще? И где он находится, если существует конечно же?
-
/user_home_folder/.clickhouse-client-history ?
-
Он пустой
-
ты как проверяешь?
-
Хотя возможно это пока что он пустой
-
Зашёл внутрь контейнера и там cat
-
просто возможно он пустой. потому что клиент не завершал свой процесс, что бы записать туда что то
-
а если ты выйдешь из клиента. то контейнер пересоздастся
-
Хм. Звучит логично. Интересно успеет ли он перед закрытием записать лог в файл, чтобы я его перехватил
-
Проверил вне контейнера, он должен писать по ходу сессии в файл. Интересно почему внутри контейнера он этого не делает
-
возможно это просто выключено
-
Короче, докладываю обстановку - достаточно изменить только *.sql файл в метадате. После приаттачивания таблицы обратно, файлы columns.txt обновляются значениями, взятыми из *.sql файла
-
поня, будем теперь знать, что все проверяется только сравнивая SQL файлы метаданных таблиц
-
Всё куда надо добавилось и раскидалось по партсам и по томам
-
Изменил лишь хвост в описании енумов, дописав необходимые значения в хвосте
-
вопщем, развлекуха на целый вечер %-)
-
-
Joined.
- 04 June 2020 (443 messages)
-
Добрый день, коллеги. Есть вопрос.
Материализованные представления в ClickHouse типа
CREATE MATERIALIZED VIEW test1 TO test AS SELECT * FROM test ORDER BY (...)
являются удобным механизмом для ускорения выполнения запроса по выборке значений столбцов по
которым не отсоритирована основная таблица test
В этом случае при наличии нескольких материализованных представлений дублируюших основную
можно выбрать при запросе подходящее мат. представление. Что на порядок ускоряет выборку, так как не сканируется вся таблица, а только часть по засечкам.
Вопрос: а нет ли в Clickhouse механизма. когда при запросе к основной таблице ClickHouse перенаправляет запрос к мат. представлению в котором запрашиваемые столбцы входят в ключ сортировки? -
-
-
Вроде как команда
OPTIMIZE -
спасибо, попробую.
-
Обратите вникаие
https://clickhouse.tech/docs/ru/sql-reference/statements/misc/#misc_operations-optimize
Если OPTIMIZE не выполняет мёрж по любой причине, ClickHouse не оповещает об этом клиента. Чтобы включить оповещения, используйте настройку optimize_throw_if_noop.Документация ClickHouseПрочие виды запросов ATTACH CHECK TABLE DESCRIBE TABLE DETACH DROP EXISTS KILL OPTIMIZE RENAME SET SET ROLE TRUNCATE USE
-
-
Подскажите, плз, если кто сталкивался - какую настройку надо подкрутить, чтобы пробиться через этот таймаут?
DB::Exception: WRITE locking attempt on "data_flat.flat_temp" has timed out! (120000ms) Possible deadlock avoided. Client should retry. (version 20.4.2.9 (official build))
Пытаюсь детачнуть таблицу из базы, но таблица большая, и процесс затягивается -
-
-
Господа, кто-нибудь сталкивался со следующей проблемой: нельзя выполнить запрос с GLOBAL-подзапросом из распределенной таблицы при readonly=1?
Ошибка следующая: DB::Exception: <username>: Cannot execute query in readonly mode.
Запрос такой:
SELECT
<columns>
FROM <db>.distributed_table
GLOBAL INNER JOIN (SELECT <colums> FROM <db>.distributed_table WHERE <clause> GROUP BY <column>) USING <columns>
WHERE
<clause>
ORDER BY <column>
Версия КХ v20.4.3.16-stable
В 20.3.7 не проявлялось -
-
в 20.4 вроде сильно переделали access rights, надо попробовать через Create User прав раздать
-
попробуй через SQL выдать grant юзеру на select из этой базы
-
попробуй Materialized View To на Materialized View To
-
Хорошая мысль, попробую покопать в эту сторону
-
не, в смысле создать получается. MV от MV не заполняется потом
-
Information
ClickHouse also supports SQL-driven workflow for managing users. ***We recommend using it.*** -
Так пробовал?
Исходная таблица -> матвью -> таблица1 ->матвью2 -> таблица2 -
https://clickhouse.tech/docs/ru/sql-reference/statements/grant/#grant-select
grant select работает на уровне колонок, разрешение на доступ к базе, как я понял, все еще выдается через allow_databases в users.xmlGRANT | Документация ClickHouseGRANT Присваивает привилегии пользователям или ролям ClickHouse. Назначает роли пользователям или другим ролям. Отозвать
-
нет, теперь пользователи хранятся по другому вообще
-
ну кроме админа
-
GRANT SELECT ON my_database.* WITH GRANT OPTION TO my_user
-
-
мб у вас версия не поддерживает их?
-
как это? :) Они создаются все ок. Просто второй MV не заполняется
-
ну каскадные МВ появились в 19.14.3.3, если у вас младше, то никак не взлетит)
-
20.4.
А где почитать про каскадные MV? whats new или дока -
Работает
-
ну, во-первых это было бы очень странно - перефигачивать всю систему управления правами, без обратной совместимости и написания большими красными буквами, что в новом релизе все сломается (а такого в release notes для 20.4 нет)
-
гы, у меня при переходе 20.3 → 20.4 удалились все пользователи.
-
Но до 19.14 надо прививается к inner а после на саму MV вроде
-
Или наоборот
-
я сделал SHOW GRANTS под нужным юзером, и там вот такое
Row 6:
──────
GRANTS: GRANT ALTER, CREATE DATABASE, CREATE DICTIONARY, CREATE TABLE, CREATE VIEW, DROP, INSERT, OPTIMIZE, SELECT, SHOW, SYSTEM FETCHES, SYST$M FLUSH DISTRIBUTED, SYSTEM MERGES, SYSTEM MOVES, SYSTEM REPLICATION QUEUES, SYSTEM RESTART REPLICA, SYSTEM SENDS, SYSTEM SYNC REPLICA, SYSTEM
TTL MERGES, TRUNCATE, dictGet ON <db>.* TO <user>
где <db> - все базы, указанные в allow_databases
Т.е. гранты есть -
Если нужен пример на chained MV до 19.14 дайте знать и скину через полтора часа
-
забавно. мы users.xml генерим ансиблом, так что не заметили. Пока заметная разница только в том, что GLOBAL-подзапросы перестали работать. Похоже это все-таки баг
-
так да, скорее всего баг, надо создать.
Я про work around возможный -
спасибо за подсказки, в качестве workaround'а пока сработало только readonly=2 :( Что как-бы намекает на то, что тут проблема не с правами доступа, а какими-то настройками
-
-
-
я делаю что то не так?)
-
может я что-то не понял, но вот ведь в доке есть
-
-
-
-
-
-
Привет всем в этом чате.
Есть вопрос по двум, на первый взгляд, одинаковым операциям которые дают разный результат.
Для конструкций вида
if(1 != count(*), max(count_in) - min(count_in), max(count_in))
стреляют ошибки:
> There is no supertype for types Int64, UInt64 because some of them are signed integers and some are unsigned integers, but there is no signed integer type, that can exactly represent all required unsigned integer values
А конструкция
minus(max(count_in), if(1 >= count(*), 0, min(count_in)))
работает -
-
-
Всем привет, подскажите, CH подходит для хранения большого массива исторических данных, с высокими требованиям надёжности? Например, истории кассовых ордеров. С учётом репликации серверов, само собой.
-
если важнее надежность, а не скорость аналитики, может что-то другое взять?
-
Joined.
-
Вот пытаемся понять, т.к. все-равно планируем использовать CH для хранения трафика. По размеру выигрыш с постресом есть, это основная причина по которой хочется эти данные перелить. Стоит ли смотреть в сторону других бд, или CH в принципе может использоваться в таком кейсе.
-
if(1 != count(*), max(count_in) - min(count_in), max(count_in))
потому что кликхаус вычисляет обе ветки If -
-
max(count_in) - min(count_in)
первый и второй аргумент UInt64 допустим
если мы будем вычитать их друг из друга, то возможно может получится отрицательно число. -
-
-
select If(1=1,toUInt64(1)-toUInt64(1),toUInt64(2));
-
ну да
-
-
-
-
-
-
-
-
ну смотри, ведь у тебя в min max могли быть и другие колонки. и могло быть так что для разных колонок min > max
-
-
-
-
-
один кейс из довольно большого числа вариантов, ради него пилить отдельную проверку? смысл?
-
-
-
UInt64 - UIn64 какой будет результирующий тип?
-
-
-
первый UInt64 = 10
второй UInt64 = 10000000 -
-
-
но мы же обсуждаем не язык программирования а субд.
-
если ты знаешь какой должен быть тип в результате. ты можешь явно приводить к нему
-
Да. Но СУБД написана на языке и опирается на его возможности.
Если язык СУБД заявляет о необходимости совпадении типов, значит проверки достаточно строгие и учитывают проверки на тип.
Я ожидаю, что при достаточно строгих проверках не должна возникать чехарда со сменой типа после выполнения арифметическх действий над значениями одного типа.
В противном случае, если двиг БД допускает возможность смены типа после арифметических преобразований, я ожидаю что и проверки будут более лояльными. -
-
Я правильно понимаю, что DateTime64 еще не подъехал? https://clickhouse.tech/docs/ru/sql-reference/data-types/datetime64/DateTime64 | Документация ClickHouse
DateTime64 Позволяет хранить момент времени, который может быть представлен как календарная дата и время, с заданной суб
-
СУБД предоставляет только те возможности, что в ней реализованы.
Скорее выглядит так, что
UInt64 это довольно редко используемый тип,
поэтому поведение по дефолту сделано такое, что бы в 90% случаев работало само и не было необходимости приводить типы -
подъехал, в 20 + версиях
-
Что-то мой внутренний дотошный зануда негодует против вот такой вот "нечёткой" логики.
-
-
-
скажу больше, клик не проверяет при вставке нет будет ли переполнение типа. ты можешь вставить 10000 в UInt8 и получить там 153
-
совпадает
-
-
нет
UInt64 - UInt64 меняет тип -
представь, что нет никаких min max
-
-
-
-
-
-
кто сказал?
-
select If(1=1,toUInt64(1)-toUInt64(1),toUInt64(2));
-
Ребят, какие таймауты надо выставить, чтобы запрос не отваливался?
Попробовал устанавливать вот эти, но всё равно отваливается. Причем, за время меньшее, чем установленные значения. Т.е. ставлю 10 минут, а отваливается за 5. Таблица большая, партиций много... -
ну, вот я проверил,
-
проверь этот запрос
-
-
Вначале отваливалось по дедлоку. Увеличил lock_acquire_timeout - по этой ошибке перестало отваливаться, но стало отваливаться по чему-то другому
-
300 таймаут это сильно похоже на дефолтный
-
There is no supertype for types Int64,
-
>IF(cond, B-A,B) - это отработает
-
-
Да, дефолтный 300. Я ставлю 600, но всё равно не хочет
-
Вычитание меняет тип?
-
расширяет его
-
иначе на каждое вычитание тебе бы пришлось приводить типы
-
-
Ок.
-
-
-
-
ты не можешь расширить тип в одной row и не расширить его в другой
-
-
-
-
-
>Сравнения проводить с точностью до типа
Никто не сравнивает оба значения, просто есть проверка что бы все ветки If можно хранить в зарезервированном типе данных для этой колонки -
DROP TABLE не работает?
-
DB::Exception: Can't drop readonly replicated table (need to drop data in ZooKeeper as well).
-
Добрый день
на dev под default пользователем ALTER TABLE table1 UPDATE работает
а на prod под != default пользователем выдает
Not enough privileges. To execute this query it's necessary to have the grant ALTER UPDATE
спасибо -
DETACH TABLE и ручками подчистить метадату и в папке с датой
-
-
если точно ничего не осталось в зуукипере
-
что бы потом не вылезло
-
Немного отвлечённый тогда вопрос.
А как этот IF определяет тип для последующего резервирования? Опять на основании проверки совпадения типов граничных значений? -
-
скорее всего вычисляет типы для обоих веток и потом смотрит есть ли для них супертип
-
>Почему не делать расширение типа только тогда, когда это нужно, а именно: в случае когда аргументы имеют разный тип
я на примере с вычитанием показал, что расширение может понадобится даже если тип один! -
-
-
потому что ЯП != субд
-
-
они делают, они автокастят... не вижу зла
-
Вот вот, автокаст. Но он не только для арифметики.
-
кликхаус не автокастит емнип
-
-
у него есть перегрузки функций для всех типов
-
-
Joined.
-
-
-
-
Добрый день всем. Подскажите пожалуйста почему могут пропасть данные из таблицы system.mutations. Есть данные за сегодня, но нет данных за месяц начиная с 30 апреля. Есть ли какой-то механизм очистки?
-
Приняв во внимание ранее озвученное заявление о расширении типа арифметическиими операторами, я бы ожидал аналогичного поведения и для оператора IF.
-
оператор if расширяет, но только там где безопасно
select If(1=1,toUInt32(1)-toUInt32(1),toUInt8(2)); -
-
-
да Int64 покрывает диапазон UInt32
-
а тут диапазон не покрывает
-
-
смотря, что за типы
до Int16, Int32, Int64 -
привет
подскажите, плз, может, кто знает
почему при выборке из MATERIALIZED VIEW читается больше байт данных (в разы), чем при выборке из его "внутренней" таблицы (.inner.view_table)? -
Входные Uint64
-
вьюха аггрегатная?
-
Что будет супером для UInt64 ?
Int64? -
да
-
-
-
видимо здесь решено было сделать компромисс
-
-
-
Привыкайте
-
-
в доке описана только половина всего :)
-
Все остальное только через страдания и чтение гитхаба
-
Ага...
Куда я денусь, с подводной лодки в погруженном состоянии :) -
-
-
не за что.
Недавно приходил человечек и просил строгий режим, что бы при вставке не возникало тихого переполнение. Но такой настройки просто нет(правда вариант с констрейтом не проверяли) -
-
да, но тихое переполнение оч неприятная штука на самом деле, и фиг сразу поймешь в чем дело то
-
-
Подскажите, какие есть способы получения данных из клика, с помощью trasact в ms sql server?
-
odbc?
-
В каком смысле? Можно пример кода
-
обычный mergetree
-
Мне надо вызвать хранимку на ms sql и получить выборку из клика
-
https://docs.microsoft.com/ru-ru/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine?view=sql-server-ver15
https://github.com/ClickHouse/clickhouse-odbc/blob/master/test/mssql.linked.server.sqlСоздание связанных серверов - SQL ServerСоздание связанных серверов (компонент SQL Server Database Engine)
-
скорее всего так можно
-
То есть вы не знаете, но советуете?
-
я не пользуюсь ms sql что бы что то утверждать. у меня другие субд.
Но предложить направление поиска я могу. -
Добрый день.
есть Clickhouse запущенный в докере. Через flyway пытаюсь делать миграцию, падает на вставке данных (около 3000 инсертов) с ошибкой
Code: 241, e.displayText() = DB::Exception: Memory limit (total) exceeded: would use 3.46 GiB (attempt to allocate chunk of 4197620 bytes), maximum: 3.46 GiB (version 20.4.2.9 (official build)).
память докеру уже выделял больше, не помогает.
Где и что нужно подкрутить ? -
в users.xml параметр max_memory_usage можно попробовать поправить.
но вы точно уверены что верную базу выбрали для 3000 инсертов на 1 инстанс в докере? -
default , примерно 1000 строк даже вставляются в таблицу. причем таблица на 6 колонок всего
-
в КХ нужно вставлять реже, но большими батчами.
-
А как работает insert select
он же должен кусками данные вставлять, по ключу сортировки?
У меня на таблице (25 Гб) падает по памяти
Memory limit (total) exceeded: would use 5.76 GiB (attempt to allocate chunk of 269625952 bytes), maximum: 5.74 GiB)
можно как-то гранулировать разбивку что ли?
КХ версии 19 -
не исследовал каким способом flyway вставляет
-
Всем привет!
У меня есть таблица в которую льются метаданные и для того чтобы получить значения метаданных для каждого объекта я делаю агрегацию (group by).
Как создать словарь из подобной таблицы с учетом того, что значения метаданных могут меняться во времени? -
Joined.
-
Данные из старой таблицы archive_table, пытаюсь перенести в новую распределенную таблицу, состоящую из двух шардов (shard_1, shard_2). Движок у таблиц и структура одинаковые.
Распределяются данные при вставки рандомно, веса одинаковые, т.е 50 на 50. На выходе получается что данные из shard_1 и shard_2 весят очень много, столько же как и в старой таблице archive_table, хотя их по отдельности в два раза меньше.
Получатся такой же объем данных, который занимает в два раза больше места. Запускал команду OPTIMAZE TABLE FINAL; - Размер не изменился. -
можно сделать эту таблицу AggregatedMergeTree и еще VIEW в нее, которое будет доаггрегировать данные
-
какие движки у таблиц и как вставляете данные?
-
привет, удалось разобраться?
у нас такая-же проблема, Len error в логах зукипера -
1. MergeTree
2. INSERT INTO распределенная таблица SELECT * FROM archive_table -
а старая таблица не реплицированная?
-
-
у distributed таблицы задавали ключ шардирования?
-
-
🤔
-
Нет, увы 🙁 Я просто перенес данные в другую таблицу снес ту по которой была эта ошибка. Обновил версию ZK кластера до послденей, и КХ до последней. И заново перезалил данные в новосозданную таблицу. и такая ошибка больше не повторялась. Как то так…
-
@iureva мб это норм
возможно при бОльшем кол-ве данных в одном месте клик просто сжал их эффективнее -
тк рандомное распределение, то мог ухудшится коэффициент сжатия
-
пробовали OPTIMIZE TABLE table ON CLUSTER cluster PARTITION '2020-03-01' FINAL? видел, что оптимизацию пробовали, мб с явным указанием партиции поможет
-
у нас был кейс, когда после оптимизации партиции немножко лучше ужалось все
-
Я обратил внимание, что если переносить данные по одной партиции, то занимаемый размер остается в норме. А когда все сразу, то начинается такая проблема.
-
а можно это как-то оптимизировать ?
-
а почему рандомное распределение используете?
-
не использовтаь рандомное распределение?
-
+
-
не вижу плюсов у рандомного относительно какого-то, которое может и помочь в будущем)
-
пробовал, раньше одна партиция хранилась на разных кусках, сейчас все в одном, но на размер это не повлияло.
-
попробуйте распределение по какому-нибудь адекватному выражению, чтобы было +- 50 на 50 в итоге
-
и сожмется лучше, и группировать потом, если нужно будет, проще
-
мне надо распределять данные равномерно. Могу указать в качестве ключа дату создания записи, она должна быть уникальной.
-
а что влияет на сжатие ?
-
а нет никакого uid или id записей?
-
кол-во и длина одинаковых последовательностей в оригинальном файле
-
нет, это не мой случай
-
а смысл дату записи?
-
если у тебя на 1 ноде сжималось лучше. значит твои данные не случайны и по ключу сортировки есть зависимость
-
вот и найди какой нибудь из столбцов ключа сортировки
-
👍
-
так как записи все уникальные равномерность распределения ляжет на веса?
-
если веса одинаковые, а ключ правильно подобран, то все норм будет
-
-
😀
-
-
кто-нибудь знает, как работает MV внутри при выборке из него? или тыкните, где почитать, плз
не допру, почему при чтении из view читается больше данных, глянул в логи, там есть дополнительный пункт в пайплайне (Filter), а если читать из .inner.view, то этого пункта нет и читается намного меньше данных
меньше/больше по кол-ву байт, а не по строкам -
там довольно простой алгоритм сжатия, чем больше повторений и чем они длиннее, тем лучше сжатие
-
представь у тебя есть столбец состоящий из 1 и 0
теперь сравни такие случаи
Все лежит в 1 парте
1 лежат в одном парте, 0 лежат в другом
1 и 0 лежат в обоих партах -
Не должно быть никакой разницы. Mv и .inner это одно и тоже. Может сломалось. Какая версия кх?
-
Нету такого механизма.
-
Спасибо! Попробую)
-
Такое есть в роадмапе на 2020 год, но сам понимаешь может и отложится
-
19.14.7.15
может быть из-за того, что я для альтера отцеплял вьюшку и прицеплял уже с новой схемой? -
Видимо раньше или не проверялось либо было специально обойдено что global создает temporary table. Видимо надо bug завести
-
Не может
-
вот и я так думаю
-
но факт остается(
-
Завел вот тут: https://github.com/ClickHouse/ClickHouse/issues/11428
Спасибо за пояснение!Can't execute SELECT query with readonly=1 and GLOBAL subquery · Issue #11428 · ClickHouse/ClickHouseI'm trying to execute following queries: SELECT <columns> FROM <db>.distributed_table1 GLOBAL INNER JOIN (SELECT <colums> FROM <db>.d...
-
лог для .inner такой:
2020.06.04 13:30:52.672221 [ 66 ] {99461634-ad12-4c26-949e-3a8e37c13221} <Debug> db..inner.mt_log_view (SelectExecutor): Key condition: unknown, unknown, and
2020.06.04 13:30:52.672269 [ 66 ] {99461634-ad12-4c26-949e-3a8e37c13221} <Debug> db..inner.mt_log_view (SelectExecutor): MinMax index condition: (column 0 in [1588280400, +inf)), (column 0 in (-inf, 1588283999]), and
2020.06.04 13:30:52.672295 [ 66 ] {99461634-ad12-4c26-949e-3a8e37c13221} <Debug> db..inner.mt_log_view (SelectExecutor): Selected 1 parts by date, 1 parts by key, 3372 marks to read from 1 ranges
2020.06.04 13:30:52.678729 [ 66 ] {99461634-ad12-4c26-949e-3a8e37c13221} <Debug> executeQuery: Query pipeline:
Expression
Expression
ParallelAggregating
Expression × 8
MergeTreeThread
2020.06.04 13:30:52.803225 [ 66 ] {99461634-ad12-4c26-949e-3a8e37c13221} <Information> executeQuery: Read 27618755 rows, 5.95 MiB in 0.134 sec., 206072548 rows/sec., 44.42 MiB/sec.
а для view такой:
2020.06.04 13:30:58.798955 [ 63 ] {7d5d0172-11c5-4529-a866-acb8ecded944} <Debug> db..inner.mt_log_view (SelectExecutor): Key condition: unknown, unknown, and
2020.06.04 13:30:58.799005 [ 63 ] {7d5d0172-11c5-4529-a866-acb8ecded944} <Debug> db..inner.mt_log_view (SelectExecutor): MinMax index condition: (column 0 in [1588280400, +inf)), (column 0 in (-inf, 1588283999]), and
2020.06.04 13:30:58.799027 [ 63 ] {7d5d0172-11c5-4529-a866-acb8ecded944} <Debug> db..inner.mt_log_view (SelectExecutor): Selected 1 parts by date, 1 parts by key, 3372 marks to read from 1 ranges
2020.06.04 13:30:58.800654 [ 63 ] {7d5d0172-11c5-4529-a866-acb8ecded944} <Debug> executeQuery: Query pipeline:
Expression
Expression
ParallelAggregating
Expression × 8
Filter
MergeTreeThread
2020.06.04 13:30:58.936572 [ 63 ] {7d5d0172-11c5-4529-a866-acb8ecded944} <Information> executeQuery: Read 27618755 rows, 540.71 MiB in 0.141 sec., 195196395 rows/sec., 3.73 GiB/sec. -
видно для вьюшки лишний шаг Filter перед MergeTreeThread
-
Не может такого быть.
Или удалились пользователи созданные через create user? там надо в 20.3 раскоментировать в config xml путь к стораджу юзеров инчае они только в памяти создаются и на диск не пишутся -
пользователи все были на диске, обновил через apt-get, все исчезли
на продакшене сделал backup users.list и остальных файлов, накатил после обновления ошибка в PROFILE 'default'. руками поправил файлы, заработало -
но таки все удалились с диска при простом обновлении 😬
-
Значит баг. Хотя в 20.3 они не были еще stable фичей. Попробую в 20.4 воспроизвести
-
Кх не acid. Нельзя быть уверенным что вставленные данные на самом деле сохранились.
-
Там есть настройка сколько хранить (100 последних?) и как долго (месяц).
-
А если перепроверять после вставки? Есть уверенность, что они останутся в сохранности?
-
View сделайте в mssql которое выбирает из хр.
-
а где это настройка? В доках нашел только finished_mutations_to_keep
-
нету уверенности кх не делает fsync
-
всем привет! подскажите, есть ли команда, которая заставит буфер-таблицу выгрузить все данные в подчиненную независимо от достижения min/max условий?
-
finished_mutations_to_keep, 100, "How many records about mutations that are done to keep. If zero, then keep all of them.
Аа может быть. Я с dddl перепутал видимо -
Спасибо Сейчас поищу настройку
-
Joined.
-
а где посмотреть значение этой настройки?
-
Словарь можно поверх обычного view сделать и во вью написать запрос какой надо
-
System.mergtree_settings
-
всем привет! кому-нибудь доводилось удалять clickhouse установленный скриптами из архива?
-
Спасибо
-
deb пакет имеется в виду?
-
вот нет, скачал архивом tar для установки там используются скрипты:
https://clickhouse.tech/docs/ru/getting-started/install/#from-tgz-archivesУстановка | Документация ClickHouseУстановка Системные требования ClickHouse может работать на любой операционной системе Linux, FreeBSD или Mac OS X с арх
-
вот не очень хотелсь бы вытирать всё ручками, может есть готовое решение?
-
так там же в директории есть скрипты для удаления
-
вот что-то нет..
-
я посмотрю ещё, спасибо большое.
-
-
-
скачаю от 20.4, я более раннюю ставил, наверное не добавляли, спасибо большое)
-
куда ставить классы?
-
Жаль. Говорят в vertica есть
Придется поддерживать данный механизм на уровне приложения. -
Добрый день, есть 2 реплики ClickHouse, как правильно поднять 3 реплику, без остановки существующих? при rsync, данные которые появятся во время работы rsync доедут до 3 реплики после ее старта?
-
-
мат вью в кликхаусе != проекции в вертике
таблица в которую вставляет данные мат вью является отдельным объектом и может иметь другой движок
проекции - это копия (части)таблицы с другим ключом сортировки -
это не кликхаус тормозит, это диски тормозят
-
-
емнип достаточно просто добавить в конфиг, подключить к зк и создать табличку, кх сам данные скачает
-
Спасибо
В vertice я не специалист.
Но судя по всему мат вью в ClickHouse позволяют сэмулировать этот механизм
путем выноса части функционала в приложение. -
-
спасибо
-
какую проблему решаете? пока вы говорите, что вам нужны разные индексы
-
Это да но он позволяет поддерживать сортировку по разным ключм
Я сравнивал ClickHouse с Postgres
Таблицы Postgres на 57 млн записях занимют 24GB (14GB таблицы + 10GB индексы)
Таблици ClickHouse - 4GB
То есть ожно созадть до 5-ти дополнительных мат вью по разным ключам сортировки чтобы данные занимали близкий к Postgres объем -
-
Joined.
-
Поток фотофиксации транспортных средств (ТС).
Основная таблица сортируется по времени
Кроме этого нужны для быстого доступа :
- таблица трасс трасс ТС отсортированная но номерам ТС и времени
- таблица потоков фотофиксаторов отсортиорванная по ID фотофиксаторов и времени
Вот уж как полгода как база работает -
-
Joined.
-
Привет! Подскажите плиз, где можно найти гайд по подключению Tableau на macOS к clickhouse?
-
-
-
в vertic-е проекции связаны с таблицей, точнее проекции это обрезок суперпроекции, а в КХ MV может хранить данных больше или меньше чем в таблице, т.е. они не связаны жестко, например в таблице может быть год данных, а в MV за неделю, и нигде это не описано, поэтому впрямую нельзя переписывать запросы
-
и в КХ новых таблиц не создавали?
-
нет, просто работали рядовые вставки
-
если движок Replicated то он скачает сам после create table (rsync вообще конкретно ничем не поможет в случае Replicated)
-
zk на отдельной виртуалке стоит
-
не знаю, может инсертов стало больше? что в логах ЗК?
а может garbage collector,
сколько размер одного снепшот файлика?
сколько озу у серверa?
как запущена java zk XMX ...? -
инсертов не стало больше
пробовали перезапустить зк - логи только новые и там все ок, с момента запуска только INFO были и все.
файл снэпшота - 1.5мб
ОЗУ 10 ГБ -
java zk xmx дефолтно запущено. Никаких настроек доп не было
-
ну не знаю, идеи кончились, включить логи в КХ в trace и смотреть кто долбит, гуглить как найти кто виноват в высокой нагрузке на ЗК
-
понял, ок. спасибо за помощь
-
-
сделайте импрувмент реквест для КХ, это будет вполне возможно запилом улучшенного merge engine, которому можно правила/полиси прокидывать =) и будет круче чем в вертике...
-
есть же уже в роадмапе на 2020 год?
-
Как сделать, не понятно. Через связный сервер? Или как?
-
не вижу
-
несколько физических представлений для кусков, несколько ORDER BY для кусков не оно?
-
view нельзя на ХР натягивать вроде, а на table-function можно
CREATE FUNCTION dbo.FnTable
RETURNS TABLE AS
RETURN (
SELECT * FROM mytable
)
CREATE VIEW dbo.MyView AS SELECT * FROM FnTable; -
увидел )
1.16. Несколько физических представлений для одного куска данных
Сложная задача, только после 1.3 и 1.6. Позволяет компенсировать 21.20.
имхо merge реализация в разы проще, и позволит более гибкие полиси прописывать -
я от этой штуки надеюсь, что они прикрутят более твердую консистентость
-
-
а то с MV фиг его знает
-
ну тогда опять надеятся на MV для перемещения данных между таблиц?
-
ааа, я наоборот прочитал, думал в КХ нужно дернуть данные из MSSQL хранимой п.
Вы можете через odbc запрос в КХ сделать через linked server -
добро пожаловать в недокументированный мир, вот еще пример для взрыва мозга
DESCRIBE TABLE
(
SELECT if(toLowCardinality('a') = 'a', 1, 0)
)
--
LowCardinality(UInt8)
т.е. LowCardinality пролезает из условия в результат -
Joined.
-
А что с мв не так? Мы просто мало пользовались
-
Может есть пример, как настраивать linked server именно к кх?
-
хм, а если написать CREATE TABLE AS SELECT if(toLowCardinality('a') = 'a', 1, 0)
должен же будет ругнутся на бессмысленный lowCardinality -
ругнется наверное
-
но в MV например ругалка отключена
-
все так, отличный механизм
но скажем так не 100% гарантия что таблица с другим ORDER BY будет иметь аналогичные данные основной таблицы -
забавно, не знал.
впрочем я всегда пользовался TO -
ну КХ odbc драйвер поставите на винду, дальше все как с mysql или с другим любым odbc например
-
-
CREATE TABLE xxx Engine = Log as SELECT if(toLowCardinality('a') = 'a', 1, 0) x
DB::Exception: Creating columns of type LowCardinality(UInt8) is prohibited by default due t... -
уже пилят Add insert_materialized_view_atomic to control pushing to MV behaviour
https://github.com/ClickHouse/ClickHouse/pull/10770 -
это только ничего не гарантирует, я может MV транкейчу по утрам
-
Ну так то вы про транзакционность уже...
Можно делать доп функционал для частичного scrubbingа, рефреша конкретных партиций (связывание зависимых таблиц-маппинг партиций), атомисити на вставке (хотя по тому ишшю выше у меня больше вопросов чем ответов), итд итп..
опять таки имхо, проекции как таковые не совсем являются решением этого -
это не совсем транзакционность имхо, просто консистентность разных ORDER BY
И одна таблица выглядит гораздо проще чем две таблицы и MV между них для каких то изменений
А еще нужно объяснять как этим пользоваться программистам -
Добрый вечер,
Code: 241, e.displayText() = DB::Exception: Memory limit (total) exceeded: would use 7.00 GiB (attempt to allocate chunk of 4502712 bytes), maximum: 7.00 GiB (version 20.3.10.75 (official build))
Начали сыпаться при записи небольших чанков. Пару недель все ок было.
Мониторинг в Я.Облаке для сервиса ничего подозрительного.
Не подскажете плз в чем проблема? -
посмотри на количество соединений к базе
-
про МВ между них речи не шло.
консистентность order by будет разменом на гибкость и усложнением merge-tree.
кмк лучше иметь возможность гибко настраивать таблицы с этими разными order by... кому надо - будет атомик инсерт делать (вставить либо везде успешно, либо никуда) -
у нас бекэнд угадывает куда ходить, типа есть агрегаты A,B,C,D, факты X,Y,Z , бекенд перебирает по очереди и ищет где есть все метрики и дименшины, и пишет sql куда надо
-
сурово
-
у нас подобная была штука, и проблема заключалась в том, что с какого-то момента выросли http соединения и судя по всему они не закрывались, а кликхаус не высвобождает память пока соединение на закроется
-
-
Спасибо!
-
это из-за фичи max_server_memory_usage_to_ram_ratio
https://github.com/ClickHouse/ClickHouse/issues/11153#issuecomment-633212510 -
в облаке саппорт по объявлениям в маршрутках набирают? Меня возьмите, я способный.
-
Ну мне допустим нужен только различный ORDER BY
И я был бы рад если бы эта фича появилась ;) -
где нужны разные агрегаты буду дальше пользоваться MV
-
ну вот вы сами сделали навороченный supermerge engine =)
-
в облаке саппорт отвечает "читайте документацию, мы хз", ты тут гораздо ценнее
-
построенный на эксепшенах, я правильно же понял ?)
-
кстати сделано 10 лет назад, для вертики или еще mysql даже
-
Спасибо! Буду чанки увеличивать, похоже много соединений и часто пишу.
-
в вертике тоже агрегаты суммирующие (типа summingMT) которые не сделать проекциями
-
кстати щаз у нас еще смешнее, если в вертике таких дименшинов нет, бекэнд идет автоматически в КХ
-
почему? на правилах... если то - иди туда, если сё - иди сюда...
-
-
>перебирает по очереди
ну я это понял буквально просто, возможно ошибаюсь -
-
Ну хотят же WAL впилить в MergeTree, так что так просто как было раньше уже не будет )
-
как я слушал, его впилить хотят для быстрых мелких вставок а не консистентности
-
в КХ просто очень сложные выражения в MV можно написать, нифига не угадать что там в поле просто sum( )
-
для durability тоже
-
т.е. для (вставка в distributed, chained вставка в МВ) итд?
ну если каждая "вставка" не бьется нигде на пути и создающиеся куски одинаковые, то наверное можно... а иначе будет ад из роллбеков -
почему могут автоматом не переноситься фильтры из WHERE в PREWHERE для MAT VIEW
кейс такой:
если выбираю из самого view, то в PREWHERE не переносится, а если из .inner.view, то переносятся, WTF... -
Joined.
-
звучит как баг
-
мне кажется, раньше все было ок (но я не помню)
уже много раз отсоединял вьюшку, подсоединял с новой схемой после альтера .inner таблицы, мб что сломалось
нет же настройки оптимизатора WHERE конкретно для какой-то таблицы? -
такое лучше в github kittenhouse в issue спросить
-
Посмотрел - не заметил.
Номер не подскажете? -
1.15-1.17
как я понял ваш запрос -
в вертике есть механизм PROJECTIONS
потому что в вертике таблица это ЛОГИЧЕСКОЕ определение под которое может быть выбрана ЛЮБАЯ проекция
в том числе и проекция с аггрегацией
механизм вставки более сложный получается... -
по идее зная какие materialized views уже есть (выбрать через system.tables)
такое можно на application layer реализовать не очень сложным способом -
Это где? На сайте ClickHouse или ALtinity?
-
Issues · ClickHouse/ClickHouse
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Возможно Вы и правы, но как-то завуалировано
-
OK
Спасибо, подумаю... -
-
OK
Спасибо за предложение -
-
Всем привет!
Столкнулся с простой задачей и хотел бы получить совет от опытных пользователей.
У меня есть 2 инстанса CH.
В этих инстансах есть таблица (DDL совпадает).
Нужно смёржить данные (т.е. перелить из одного инстанса в другой, при этом сохранив данные, которые были).
Как это правильно сделать?
Просто написать скрипт с двумя коннетами, который будет читать, а потом вставлять?
Какие бест практис? -
insert into select remote ?
-
Хм, ща погуглю, спасибо
-
remote | ClickHouse Documentation
remote, remoteSecure Allows to access remote servers without creating a Distributed table. remoteSecure - same as remote
-
Ребят есть вопрос: на хосте с1 указан лимит по памяти для пользователя 40гб. На этой же машине существует дистрибьют таблица. На других хостах в кластере лимит по памяти меньше, 25гб. Когда я делаю запрос через с1 лимит по памяти же не должен меняться на хостах в кластере? Пользователь везде один.
-
ну делаете на первом alter table xxx freeze
в папке shadow появляются парты, копируете их на второй инстанс, например rsync -rav папка_в_shadow другой_хост:/bkp
перекладываете в папку таблицы detached
делаете владельцем chown clickhouse.clickhouse -R ...
делаете атач партиций / партов -
Оу, не, спасибо, но с таким не справлюсь )) не на столько с CH знаком )
пойду с remote экспериментировать -
передается max_memory_usage на шарды
и есть такой тикет https://github.com/ClickHouse/ClickHouse/issues/11292 -
Timeout: connect timed out: 255.255.255.255:9000 (version 20.3.10.75 (official build)
Для подключения remote что-то нужно в конфиге активировать?
Я подключаюсь к машине с DataGrip, но через remote достучаться не могу.
Стучусь на tcp порт, который в конфиге указан -
Joined.
-
он же ссш-тунель умеет
-
спасибо, это совершенно неожиданное поведение
-
Заменил на порт http и ушёл думать (жду селект).... иии отвалился опять )
-
так закрыт наверное порт или КХ видят друг друга через локальную сеть и там другие ip, а у вас наружняя
-
а это особенность или баг такой? я не очень понимаю почему параметры инициатора должны перекрывать параметры на реплике. реплика может быть не сильно похожа на инициатора…
-
не знаю, так им было надо
наверное чтобы передать ограничения пользователя, потому что по шардам ходит другой пользователь (описанный в remote_servers) и у него свой профиль -
-
Работаю без локальной сети
в /etc/clickhouse-server/config.xml в параметре tcp_port был указан 9000.
Я попробовал сдвинуть на 9001, перезагрузил сервер. С независимой машины до порта достучаться получается без проблем. Файрволы выключены.
listen_host слушает все ipv4+ipv6
🤷♂️ -
пробую с кх один на второй:9000
900 ------ неправильный порт
curl xxx:900
curl: (7) Failed to connect to xxx port 900: Connection refused
SELECT *
FROM url('http://xxx:900', 'CSV', 'id String')
Received exception from server (version 20.4.4):
Code: 1000. DB::Exception: Received from localhost:9000. DB::Exception: Connection refused.
----------
9000 ------ правильный порт
curl xxx::9000
Port 9000 is for clickhouse-client program. You must use port 8123 for HTTP.
тоже самое из КХ, тестируем порт
SELECT *
FROM url('http://xxx:9000', 'CSV', 'id String')
Received exception from server (version 20.4.4):
Code: 86. DB::Exception: Received from localhost:9000. DB::Exception: Received error from remote server . HTTP status code: 400 Bad Request, body: Port 9000 is for clickhouse-client program.
You must use port 8123 for HTTP. -
В документации написано, что для remote нужно tcp порт использовать
По 8123 достучаться тоже не получилось.
Дёргать curl на saas инстансе не понял как, возможно - никак ) -
але, вы читаете что я пишу?
-
Да, но не понял причём тут 900 )
-
я показываю пример как протестировать ip/port с помощью URL фунции
-
А вы читаете, что я пишу? (последнее предложение, про curl)
-
900 -- это пример что будет если порт неправильный
-
конечно 9000 вам нужен
-
я показываю как увидеть что 9000 доступен
-
надо выполнить SELECT * FROM url('http://xxx:9000', 'CSV', 'id String')
-
если будет ответ Port 9000 is for clickhouse-client program. -- значит порт доступен
-
это просто проверка доступности
-
Это я уже проверил, сдвинув 9000 на 9001
-
если ткнутся на порт 9000 -- который вам нужен с помощью http будет ответ Port 9000 is for clickhouse-client program.
-
слабо вот так
SELECT * FROM url('http://xxx:9000', 'CSV', 'id String') ? -
Сейчас попробую, через url не пробовал
-
HTTP status code: 400 Bad Request, body: Port 9001 is for clickhouse-client program.
Т.е. порт доступен, но от этого не легче ) -
а select * from remote('xxx:9001', system, one, 'юзер', 'пароль')
-
Это как в доке
remote('addresses_expr', db.table[, 'user'[, 'password']]) -
и что?
можно и так и так
select * from remote('xxx:9001', system, one, 'юзер', 'пароль')
select * from remote('xxx:9001', system.one, 'юзер', 'пароль') -
Не в этом проблема, оба варианта юзал
-
и что ошибка ?
-
DB::NetException: Timeout: connect timed out: 00.00.00.00:9001 (version 20.3.10.75 (official build)
-
00:00:00:00 -- вы понимаете что туда нельзя подключится?
-
это алиас для
-
для listen
-
lol, я IP так спрятал )
Могу писать 8.8.8.8:9001, если так будет проще :)
Там IP моего сервера -
означает все IP
-
айпи стоит прятать за файрволом, а не за редактированием текста)
-
ясно, загадочно. system.one тоже?
-
Согласен, но писать в чате IP как-то неразумно )
-
ааааа сколько пинг между серверами?
-
попробуйте так из КХ клиента
set connect_timeout_with_failover_ms=1000;
select * from remote('xxx:9001', system, one, 'юзер', 'пароль'); -
у КХ таймаут 50мс по дефолту, хотя в 20.3.10.75 вроде как не должно влиять это на remote
-
Да, скорее всего тут проблема
Из России в Германию идём :)
Ща попробую -
Огонь! Работает :)))))
-
Спасибо!
-
а ясно, так и не сделали https://github.com/ClickHouse/ClickHouse/issues/5188 годы идут.
-
а данных то много? если много то файлами удобнее... я думал что у вас в одной сетке два сервера стоит
-
Не, данных немного, пара Гб
- 05 June 2020 (172 messages)
-
Joined.
-
-
Joined.
-
Привет!
А есть возможность хранить словари не только в памяти? Видел пару слов об этом в документации, но не больше, может оно уже в релизе, просто документацию не обновили?
Сценарий использования - хранение нескольких небольших табличек из mySQL, которые остались бы в живых после перезапуска сервера клика. На случай если mySQL-ю в этот момент настал конец. -
ну да, стандартный механизм словарей как раз умеет тянуть таблицы из других БД, мы например, тянем из Постгреса несколько более-менее статичных таблиц со справочными данными и с ними потом уже джойнимся в запросе к основным таблицам КХ
-
Это понятно, мы тоже активно используем словари. Но они хранятся в памяти, а хочется чтобы они пережили перезагрузку сервера. Недавно словили совершенно жуткий по продолжительности даунтайм датацентра с mySQL базой, и если в процессе очередного такого выкрутаса случится перезапуск клика - будет не очень.
-
да, теперь я понял... тогда присоединяюсь к твоему вопросу) интересно...
-
Тут либо MySQL делать отказоустойчивым, либо копировать данные в ClickHouse, и для них уже поднимать словари
-
Если база не большая в mysql, подымите локальную реплику на КХ на read-only
-
-
если большая, то словари кмк тут не спасут, потому что он в памяти КХ кешируется только частично, и подгружается в нее по мере необходимости.
Может вопрос не про словари, а про то, как использовать КХ для бекапа больших таблиц из другой БД?) -
всем привет.
есть MV с движком AMT.
как для нее поменять запрос, согласно которого она формируется? так чтобы не похерить уже имеющиеся данные -
База большая, но используется из неё для словарей очень мало данных, вполне подходит для словарей. Проблема стандартной репликации в том, что на реплику идет бинлог (весь поток данных) и уже там разбирается. То есть, условно, на реплике 5 таблиц из 100, ни идут все 100, и лишнее отбрасывается (если я всё правильно понимаю и объясняю). Для географически разнесенных реплик с большой задержкой это фатально.
Раздумываем сейчас над вариантом с выносом нужных таблиц в отдельную БД, тогда репликация станет реальной. -
Joined.
-
Joined.
-
-
-
-
-
-
Добрый день
подскажите пожалуйста как подключиться секюрно через clickhouse-client
clickhouse-client -s
ClickHouse client version 20.3.8.53 (official build).
Connecting to localhost:9440 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9440)
как я понимаю у меня нет кликхауса на 9440 порту
в настройках все по умолчанию, сертификат добавил.
netstat вот что показывает
sudo netstat -tulpn | grep clickhouse
tcp 0 0 127.0.0.1:9004 0.0.0.0:* LISTEN 665/clickhouse-serv
tcp 0 0 127.0.0.1:9009 0.0.0.0:* LISTEN 665/clickhouse-serv
tcp 0 0 127.0.0.1:8123 0.0.0.0:* LISTEN 665/clickhouse-serv
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 665/clickhouse-serv
tcp6 0 0 ::1:9004 :::* LISTEN 665/clickhouse-serv
tcp6 0 0 ::1:9009 :::* LISTEN 665/clickhouse-serv
tcp6 0 0 ::1:8123 :::* LISTEN 665/clickhouse-serv
tcp6 0 0 ::1:9000 :::* LISTEN 665/clickhouse-serv -
большие таблицы?
-
угу
-
-
из коробки не получится, но можно периодически самим передампивать данные словаря из таблицы c mysql движком в локальную ну либо на локальный файл, и на локальных данных уже строить словарь..
ну или ждать этого:
10.17. Локальный дамп состояния словаря для быстрого старта сервера -
ну есть merge join в КХ.
Настройки тут:
https://clickhouse.tech/docs/ru/sql-reference/statements/select/join/#memory-limitationsJOIN | Документация ClickHouseСекция JOIN JOIN создаёт новую таблицу путем объединения столбцов из одной или нескольких таблиц с использованием общих
-
join_algorithm hash 0 Specify join algorithm: 'auto', 'hash', 'partial_merge', 'prefer_partial_merge'. 'auto' tries to change HashJoin to MergeJoin on the fly to avoid out of memory.
—-
поиграйтесь с этим параметром. -
-
<date_time_input_format>best_effort</date_time_input_format>
-
Ага понял, спасибо
-
спасибо
-
это только для ИСО форматов вроде (а там всегда год-месяц-день)
https://clickhouse.tech/docs/ru/operations/settings/settings/#settings-date_time_input_formatНастройки | Документация ClickHouseНастройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
привет, может кто-нибудь подскажет, при использовании clickhouse-copier получаю такие сообщения
<Information> ClusterCopier: There was an error while executing ALTER on each node. Query was executed on 4 nodes. But had to be executed on 153198686
что это значит, и почему он хочет на стольких нодах query запускать? -
select parseDateTimeBestEffort('10.11.2020')
-
но это только для datetime, нужно потом отдельно оттуда дату вытаскивать
-
2020-11-10 01:00:00
:) работает, но откуда 1 час взялся? (моя зона utc+3) -
у меня 00:00:00 )
в какой таймзоне сервер? -
-
Eastern European Summer Time
Time zone in Bucharest, Romania (GMT+3)
Friday, June 5, 2020, 1:24 PM -
ты через датагрип запустил или через консольный?
-
-
в консоли ок
V30LC-INCLKHSE1.PW.LOCAL :) select parseDateTimeBestEffort('10.11.2020');
SELECT parseDateTimeBestEffort('10.11.2020')
┌─parseDateTimeBestEffort('10.11.2020')─┐
│ 2020-11-10 00:00:00 │
└───────────────────────────────────────┘
1 rows in set. Elapsed: 0.007 sec. -
ну возможно jdbc пытается привести к локальной дате как то
-
да хз, я ж тоже в utc, может у бобра где-то закопано... toDateTime также врет
-
Всем привет, у кликхаусе основная идеология это замена greenplum в аналитических системах? Или замена транзакционных бд в удобных случаях?
-
основная идеология - быстрые запросы к одной гигантской таблице
-
-
-
Ну кстати простое решение, и сервисов никаких городить не надо :) Спасибо :)
-
да не за что, ну как минимум условный крон делать придется или другой скедюлер
-
Joined.
-
Привет, как писать запросы в clickhouse вида (выбрать товар с ценой выше средней) без WITH, OVER (не поддерживаются в CH) и без копипасты subquery (это не мелкий подзапрос)?
например (с копипастой)
```SELECT name, price
FROM subquery
WHERE (price) > (SELECT avg(price) FROM subquery)``` -
можно через groupArray->array join
-
спасибо, ушел пробовать )
-
здесь в чате 100500 примеров, поищите, найдете готовый
-
хм, внезапно не помогло
-
вот теперь помогло )
когда тз абсолютно идентичные - работает.
когда несовпадают, несмотря на совпадение UTC+3, он думает что время зимнее и дает оффсет... странно... -
Так ноябрь зимнее
-
Detach table mv;
attach materialized view mv as новый запрос -
точно же ))))
-
Вне кх. Кх не умеет мердж джойн настоящий и с новыми настройками будет обрабатывать левую таблицу сотрируя кусками и сотртировать правые
-
работает это так. На сервере tz x. У клиента y (в jvm). Jdbc из кх выбирает tz. Делает запрос с формате tsv и полученные данные конвертит из x в y
-
да все логично, я в дату даже не додумался глянуть...
-
это максимально неочевидное поведение имхо.
-
Надо в конфиге раскоментировать чтобы кх начал слушать секурные порты 9440
-
привет
почему-то размер файла с засечками увеличился в 2 раза при переходе от String или Enum к LowCardinality(String), кол-во засечек не поменялось
может кто сталкивался с кейсом?
also размер файла с ключом стал меньше -
-
<https_port>8443</https_port>
<tcp_port_secure>9440</tcp_port_secure>
эти настройки раскоментированы
может еще что-то ? -
в контексте КХ это же дефолтное поведение родного клиента - по моему очевидность определяется этим )
Но да, лучше ввести флажок, чтоб клиент не додумывал, потому что клиенты других баз не додумывают... -
А что кх пишет при старте? Может файлы ключей и сертификаты ему не нравятся?
-
Всем привет, кто-то пробовал интеграцию Clickhouse и apache kafka через двихок kafka? Какой объем примерно трафика сможет поглоить cickhouse на 8 ядерной виртуалке с 8 cpu? Проблема в том, что когда в кафку на вход идет 50mbit/s консьюмер Clickhouse-a поглощает примерно 45mbit/s и образуется все время растущий лаг... При этом процы сервера clickhouse - забиты лишь наполовину! Но что бы я ни делал (игрался с настройками rdkafka и количеством партиций) быстрее он все равно не поглощает..
-
ничего не пишут
сертификат делал по команде которая указана в конфиге SSL -
openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt -
как-то странно, то есть если пустить 60mbit все равно 45 только возьмет? а не пробовали вторую таблицу к тому же топику?
-
все равно 45, 2 не пробовал. Думаешь из-за задержки на запись в таблицу? (У меня 1 mergetree) Самое странное что процы ток в половину загружены, так и не получилось их в планку поставить...
-
не знаю, вроде как и немного если честно по трафику
-
но советуют вторую таблицу если не выгребает
-
Спасибо попробую..
-
-
ну я в джава клиентах в connection properties вписываю
use_time_zone Canada/Atlantic
use_server_time_zone_for_dates false
use_server_time_zone false
в этом случае jdbc не делает select timezone() / считает что данные с сервера приходят в Canada/Atlantic / и конвертирует их мою клиентскую таймзону (JVM) Canada/Atlantic. Таким образом я вижу даты в таймзоне сервера (у которого обычно UTC, но это не важно) -
надо проверять на самом последнем 20.4
если пинг большой до брокера рекомендую влючить комрессию топиков zstd -
у меня сейчас 20.3.8
-
не такой уж и древний)
-
они в 1 сети пинг маленький
-
а сколько это в строках 45мбит? в смысле они широкие или узкие?
-
а если написать только так
use_server_time_zone_for_dates false
use_server_time_zone false
клиент будет конвертить от UTC к локальной ТЗ? -
примерно 12к msg/sec
-
по моему ошибку напишет что use_time_zone не установлена (я проверял 2 года назад)
-
параметр у таблицы kafka_max_block_size попробуйте поставить 128к -> 256k
но вроде 2 кафка таблицы должны тоже помогать -
Спасибо за совет, попробую
-
ну вот поставил я голый кх, на чистый линукс
он стартовал успешно
я раскоментивал
<https_port>8443</https_port>
<tcp_port_secure>9440</tcp_port_secure>
рестартую, кх не стартует
2020.06.05 13:11:15.381770 [ 151662 ] {} <Error> Application: DB::Exception: Listen [::]:8443 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = SSL context exception: Error loading private key from file /etc/clickhouse-server/server.key: error:02000002:system library::No such file or directory (version 20.4.4.18 (official build))
2020.06.05 13:11:15.381781 [ 151662 ] {} <Information> Application: shutting down
не может быть такого что эти настройки раскоментированы, кх стартовал, и при этом не слушает эти порты -
да, что-то даже получилось, спасибо))
как-то можно упростить (например промежуточные имена не нравятся: SELECT name FROM <...> col.1 as _name<...>)?
SELECT _name as name, _price as price, avg
FROM (
SELECT arrayJoin(groupArray((name, price))) as col, col.1 as _name, col.2 as _price, avg(price) as avg
FROM (
SELECT arrayJoin([(3, 'a'), (5, 'b'), (3, 'c'), (3, 'd')]) as col, col.1 as price, col.2 as name
)
)
WHERE price > avg; -
... ( WITH col.1 as price, col.2 as name
SELECT arrayJoin([(3, 'a'), (5, 'b'), (3, 'c'), (3, 'd')]) as col, price, name
... -
WITH надо писать на том же уровне, он вниз не пробрасывается
-
так и не понял, как можно убрать промежуточные имена _name, _price или что-то упростить с with (
если не затруднит, отредактируйте, плз, мой пример
PS строчку SELECT arrayJoin([(3, 'a'), (5, 'b') <...> лучше не трогать, это "мок таблица" -
нашел ошибку
<Error> Application: Listen [127.0.0.1]:9440 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = SSL context exception: Error loading private key from file /etc/clickhouse-server/server.key: error:0200000D:system library::Permission denied (version 20.3.8.53 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
и подскажите пожалуйста как restart делаете?
я при sudo service clickhouse-server restart ничего не вижу -
поменял права для сертификатов на clickhouse и завелось
-
я ошибку в логе смотрел, это копипаста из лога
-
ясно, в итоге тоже там нашел ошибку
спасибо -
-
-
-
странное поведение, а что в логах то?
-
какая версия клика? Сколько вообще оперативной памяти на сервере?
-
-
я не очень понял вашу проблему если честно, что именно вам мешает в промежуточных именах...
так достаточно эстетично?
SELECT name, price, avgPrice
from (
SELECT
groupArray((t.name, t.price)) as col,
avg(price) as avgPrice
FROM (-- data simulation
SELECT arrayJoin([(3, 'a'), (5, 'b'), (3, 'c'), (3, 'd')]) as col, col.1 as price, col.2 as name
) as t
)
ARRAY JOIN col, col.1 as name, col.2 as price
WHERE price > avgPrice -
а что должно быть? КХ жрет всю память что разрешили, ООМ его убивает
-
Понимаю, не ожидал что после рестарта он продолжит такое поведение.
Версия - 20.1.5.26 -
в каком продолжит? сам запрос не запускается
-
А это точно запрос, а не мутация, мердж?
-
-
но ты говоришь, что ты рестартишь кликхаус, не запуская повторно запрос и он сам по себе падает?
-
да
-
почти ) избавился от промежуточных имен, теперь бы не хотелось зависеть от порядка упаковки значений (name, price) при распаковке col.1 as name, col.2 as price, но динамические имена колонок просто так не даются ((
В боевых условиях полей не 2 )
SELECT col.1 as name, col.2 as price, avg
FROM (
SELECT arrayJoin(groupArray((name, price))) as col, avg(price) as avg
FROM (
SELECT arrayJoin([(3, 'a'), (5, 'b'), (3, 'c'), (3, 'd')]) as col, col.1 as price, col.2 as name
)
)
WHERE price > avg; -
>(name, price) при распаковке col.1 as name, col.2 as price, но динамические имена колонок просто так не даются
не получится, туплы адресуются только по номеру в тупле, ассоциативной адресации нет.
но если честно проблема не ясна. Вы будете генерировать кодом или писать руками? -
а в логах есть что то интересное?
Можно в теории очистить таблицу-назначение, маловероятно но вдруг он пытается что то сделать с tmp партами -
если вас прямо напрягает нумерация - не используйте тупл
-
В логах один эррор - <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 240, e.displayText() = DB::ErrnoException: Allocator: Cannot mremap memory chunk from 4.00 GiB to 8.00 GiB., errno: 12, strerror: Cannot allocate memory, Stack trace (when copying this message, always include the lines below):
-
сколько оперативной памяти на сервере?
-
-
например джойны не учитывают этих ограничений.
и я бы добавил
cat /etc/clickhouse-server/conf.d/marks_cache.xml
<?xml version="1.0"?>
<yandex>
<mark_cache_size>256000000</mark_cache_size>
</yandex> -
попробуй
-
но 16гб это мало
-
скок записей в таблицах было?
-
468к
-
а версия КХ ?
-
ClickHouse server version 20.1.5.26 (official build).
-
alter delete запускали?
-
-
можно же двумерные туплы брать: (('name', name), ('price', price)) , чтобы сохранить ассоциацию имя-значение
Генерировать запросы будем по-разному: и руками, и скриптом
Проблема сейчас в том, что можно легко ошибиться при перечислении и при рефакторинге -
надо больше логов, непоятно что делал <Error> void DB::BackgroundProcessingPool::threadFunction()
и надо обновлять до 20.1.12.86 -
Что именно из логов показать, трейсы? не хочется сюда много шума тащить.
-
ну весь желательно
-
и перебором искать туплы динамически? это какой-то новый уровень оверэнжиниринга, тормозов и доп памяти для запроса (в 2 раза минимум)...
-
-
зачем искать? ) SELECT col.1.2 as col.1.1, col.2.2 as col.2.1 FROM (SELECT (('name', 1), ('price', 2)) as col) красота же (нет, можно еще лучше), но и так нельзя (
-
я сломался походу, видимо вечер пятницы влияет ))) вон Денни или Дмитрий лучше разберутся )
делайте уже так если цифры вам совсем спать не дают...
SELECT
name,
priceArr[idx] as price,
avgPrice
from (
SELECT
groupArray(t.name) as nameArr,
groupArray(t.price) as priceArr,
avg(price) as avgPrice
FROM (-- data simulation
SELECT arrayJoin([(3, 'a'), (5, 'b'), (3, 'c'), (3, 'd')]) as col, col.1 as price, col.2 as name
) as t
)
ARRAY JOIN nameArr as name, arrayEnumerate(nameArr) as idx
WHERE price > avgPrice -
ну это мерж таблицы search_index.vector_index нахрена он памяти столько жрет непонятно, обновитесь сначала.
в search_index.vector_index есть String поле в котором длинные строки? и сколько там полей в таблице ? примерно? -
-
-
ну это из-за массивов тогда. Вам надо уменьшать merge_max_block_size например сделать = 500
https://github.com/den-crane/ClickHouse/blob/master/docs/ru/operations/settings/merge-tree-settings.md#merge_max_block_size-merge-max-block-size -
на мой вкус выглядит страшнее, чем обычные туплы с циферками :)
Да и вообще разве базовый sql позволяет динамические названия?! -
я не. читал целиком, если туплы не нравятся
groupArray((name, price))
то почему не groupArray(price), groupArray(name) -
там походу динамическое программирование требуется
-
я вообще sql запросы не пишу руками, поэтому претензия непонятна ща
-
нет, но что-то типа
tuple.name1
удобная штука -
ну, а там руками хочется чтоб люди не ошибались с номерами
-
на самом деле если у него динамическое построение запроса, что мешает просто везде использовать один и тот же массив правильным образом для подстановки
-
защита от кривых рук наверно
https://t.me/clickhouse_ru/165352Artsiom Ivanov in ClickHouse не тормозитможно же двумерные туплы брать: (('name', name), ('price', price)) , чтобы сохранить ассоциацию имя-значение Генерировать запросы будем по-разному: и руками, и скриптом Проблема сейчас в том, что можно легко ошибиться при перечислении и при рефакторинге
-
Спасибо, помогло.
-
-
Joined.
-
Скажите, пожалуйста, стоит ли пытаться реализовывать ETL процессы по агрегации данных, используя Clickhouse? Или более лучшей практикой будет использование сторонних инструментов для загрузки уже подготовленных данных в агрегированном виде в БД?
-
смотря, какая агрегация? JOIN ить множество таблиц? лучше до кликхауса.
Считать всякие avg по GROUP BY, для этого есть отличные mat View -
Join-ы
-
Очень больших таблиц
-
Лучше до кликхауса, впрочем если были бы маленькие таблицы справа, то можно попробовать было бы dictionary
-
То есть для примера если у меня есть две огромные таблицы, которые хранят начало и конец сессий, то лучше писать все в одну и на одной таблице через аналитику получать данные требуемые о начале о конце каждой из сессий
-
Верно?
-
-
У тебя отдельная таблица для начала и конца сессий?
-
Да
-
Вообще кликхаус тяготеет к хранению всего в 1 широкой таблице
-
Разработчики так создали
-
ну можно либо разрабов упросить писать все в 1 таблицу, либо через MV направить все туда. но это костыль
-
-
👌
-
Спасибо за информацию
-
В clickhouse как то можно установить требования к паролям уз?
-
Нет, rbac еще только-только впилили.
-
Добрый ночи
А есть возможность сделать ASOF JOIN так, чтобы для отсутствующих в правой таблице записях возвращать записи из левой с нулевыми значениями из правой? (ну то есть outer) -
ASOF LEFT JOIN ?
-
Спасибо! (мне непередаваемо стыдно что я попробовал всё кроме этого очевидного варианта)
- 06 June 2020 (31 messages)
-
Joined.
-
Ребят, как переименовать таблицу?
DB::Exception: WRITE locking attempt on "data_flat.flat_temp" has timed out! (120000ms) Possible deadlock avoided. Client should retry. (version 20.4.2.9 (official build)) -
Может, сервис рестартануть? А данные не покорраптятся?
-
вообще ничего страшного в этой ошибке нет
-
ты делал ALTER TABLE?
-
ага
-
Вернее, вот так
RENAME TABLE data_flat.flat_temp TO data_flat.flat_temp_old -
ALTER TABLE занимает некоторое место в очереди между обычными запросами, и в этом случае не дождался ее похоже
-
Я удалял данные из таблицы, вернее, переносил из одной в другую. Потом решил переименовать. А она ну ни в какую. Даже с интервалом в несколько часов делал - думал, может, если какой процесс ещё не закончился
-
мх, вообще это означает. что клик не может взять лок на эту таблицу
-
можно попробовать рестартнуть сервис и быстро ее rename, или может DETACH ATTACH сделать таблицы
-
но скорее проще всего убрать запросы к ней:)
и зависит от того, какие у тебя есть возможности -
Кстати, аттач/детач тоже не смог сделать - пишет ту же ошибку, только на READ. Собственно, поэтому и пришлось переносить в другую таблицу с изменённой структурой - не детачит и всё тут. Хотел расширить количество значений под enum, участвующем в партиционировании, изменив *.sql в метадате. Ну так вот, на мелких тестовых таблицах сработало, а на боевой огромной не получилось. Пришлось создавать новую с обновлённой структурой, а потом селектить/инсертить. Но старую, блин, даже пустую переименовать не могу (((
-
SELECT * FROM system.processes WHERE query LIKE '%data_flat.flat_temp%';
-
Посоветуйте как лучше сделать.
Есть 7 числовых фильтров - countryId, browserId, OsId и т.д.
Их все можно запихать битовой маской в uint32.
В реалиях КХ лучше сделать 7 отдельных колонок uint8 или одно поле с маской uint32 ?
Если важно - эти фильтры будут частью primary key.
Кроме страны, которая 8 бит, остальные фильтры от 1-го бита до 5. -
Сорри за офф, очнадр
Привет.
Не подскажете, программа для такого кейса:
Есть mp4, штук 10 и минут на 30,
Надо на выходе получить одно видео, на 3 минуты и со своим аудиорядом.
Ну и без ватермарки и т.п.,
Желательно под убунту :-) -
ffmpeg
-
7 отдельных колонок дают меньше гемора, но больше по памяти и диску... если данные влезают лучше не велосипедить. чтобы индекс полезней работал хорошо лучше сортировать по колонкам с низким кардиналити (ставить их вначале)
-
-
ffmpeg
-
Al T @nyoroon
Спасибо большое! -
Спасибо.
А вообще надо потестить для себя чтоб снять вопросы.
По диску разницы может особой и не быть из-за поколоночного сжатия, а вот в памяти при select'e (после распаковки) отдельные колонки должны больше занимать. -
да, если не упираетесь, то оно того не будет стоить... ну и менять индивидуальные колонки проще чем битмапы
-
Пока никуда не упираемся, этап проектирования )
Ожидается до 100M записей в сутки в SummaryMergeTree.
Крутиться будет в облаке, диск можно расширять до определённых пределов (iops'ы тоже), ядер до 64-х на одном тазике.
Характер нагрузки - постоянная запись пачками десятков тысяч строк, относительно редкие чтения со сканированием в пределах 1M-100M записей.
В SummaryMergeTree первичный ключ 12 колонок (если эти фильтры отдельными столбцами делать). Отсюда и возник вопрос, может его урезать за счёт битовой маски.
В общем лучше протестировать разные варианты и на числа тогда смотреть. -
можно разделить PK и ORDER BY
если часть столбцов нужна только для сортировки -
Сортировки нет, только группировка по координатам.
Если кратко, то хранить перемещения мышки. Решено не хранить с точностью до пикселя, достаточно привязки к сетке 15х15 пикселей + счётчик, чтоб уменьшить количество данных. И нужен ряд фильтров: броузер, ос, и т.д.
Отсюда возникла схема с Summary таблицей и индексом:
pageId,date,deviceTypeId,coordX,coordY,country,browser,os,... + count поле.
По полям pageId,date,deviceTypeId всегда будет условие в where. По остальным опционально. Все эти поля будут входить в group by и выбираться coordX,coordY,sum(count) -
Не парьтесь, делайте отдельные колонки. На порядок не будет изменений, слишком мало колонок у вас.
-
я бы попробовал
partition by date
primary key pageId,deviceTypeId,country
order by pageId,deviceTypeId,country,browser,os,coordX,coordY -
Всем спасибо, будем пробовать
-
-
Перемещений да, группируются в блоки по 15x15 пикселей. Хранится счётчик для блока, а не перемещения в сыром виде. Для всех пользователей андроида из одной страны в сутки в рамках одной страницы пусть будет 15К записей. Но вообще, конечно фильтры (срезы) очень сильно добавляют данных. Опять же, на лавры Гугла/Яндекса не претендуем, трекать весь мир планов нет. А оценка в 100M/сутки, выглядит для старта скорее даже завышенной в конкретно наших реалиях.
- 07 June 2020 (55 messages)
-
Joined.
-
Joined.
-
Joined.
-
С чем может быть связана эта ошибка?
Code: 159, e.displayText() = DB::Exception: Timeout exceeded: elapsed 5.00045659 seconds, maximum: 5: While executing MergeTreeThread (version 20.3.7.46 (official build)) -
Делаю select'ы с union'ами. На выходе около 3 млн строк должно получиться. Запрос то отрабатывает, то не отрабатывает
-
Если отрабатывает, то секунд за 30
-
безотносительно к ошибке, хочется узнать 3 миллиона строк куда потом?
-
это ETL у вас?
-
В Табло)
-
а таблу нормально от 3м точек? в интернетах больше ~500к в принципе не рекомендуют.
-
Да, нормально. Я тестирую запрос через tabix или datagrip
-
да тут просто гонять 3 миллиона на каждый чих табло
-
Не, там если extract сделать, то табло локальную копию таблицы из запроса сохранит у себя
-
на экстракт нормально. Я думал, вы отчёт строите. А зачем кх, если экстракт? Или кх является и хранилищем тоже?
-
Кх - хранилище
-
Ну так вот, почему-то через datagrip sql запрос исполняется на 9/10 union all, а через tabix, на 3-[ union уже timeout вылезает
-
по ошибке: в кх очень много разных таймаутов. Я бы сделал select * from system.settings и поискал бы 5 или 5000. Точнее, к сожалению, не знаю
-
-
И вот 5000. Вроде, все не то
-
попробуй сделать log_level trace
и отследить этот запрос в логах? -
в табиксе настройка справа в верху, под шестеренкой
-
Опа
-
раз в неделю в этом чате этот вопрос.
-
Все отработало
-
я честно ни разу в жизни табикса не видел, но ответ уже запомнил
-
Странно
-
Спасибо)
-
Курсы по бигдата
Данный курс сделает из вас специалиста за 10 мин
-
Немного юмора:)
-
Тут еще одна ошибка вылезла. Запрос работает, если делать select count(), но падает, если сделать select *
select count()
from (
select A, B, C
from table1
union all
select A, B, C
from table2
) -
-
Invalid status for associated output
-
тоже ловил именно такое на юнионе. в районе 20.3.11 или чуть дальше собирались чинить, вроде бы
-
баг плавающий. Если все строки в юнионе будут разные, он исчезнет
-
если в обоих union'ах поставить limit 10, то работает
-
А без лимитов - нет)
-
-
Это 20.3.7.46
-
в трекере видел у них уже несколько (других) багов на юнион. Думаю, просто не стоит им пока пользоваться, благо это обычно не сложно.
-
нету такого бага
https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aissue+is%3Aopen+%22Invalid+status+for+associated+output%22ClickHouse/ClickHouseClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
надо заводить и воспроизводить
-
какая структура у таблицы?
-
Друзья, братья, коллеги и просто неравнодушные, подскажите какой движок лучше использовать для небольшой таблички(по факту словарь) которую надо будет джойнить? Dictionary, как я понял, для внешних словарей. Если нет, подправьте.
-
А фикс есть: https://github.com/ClickHouse/ClickHouse/pull/11200
Скорее всего это про этоFix StrictResize by KochetovNicolai · Pull Request #11200 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): Bug Fix Changelog entry (a user-readable short description of the changes...
-
можно словарь на local сделать, и не надо делать join, делайте dictGet, он в тысячи раз быстрее https://gist.github.com/den-crane/3cf085dc0e36d9c51bde825aa72a8ae9#file-flows-sql-L8
-
Ща, сек. Проверю кое-что еще
-
Спасибо, увидел кое что новое))
-
-
Кто нибудь знает почему запрос create dictionary my_dic ( id Uint64, attr String, attr2 String) выдает ошибку: Incorrect CREATE query: required list of column descriptions or AS section or SELECT?
-
-
А как посмотреть?
-
-
19.16.12.49
-
-
Ты прав, спасибо😊
- 08 June 2020 (292 messages)
-
Лёёё... вот что самоизоляция делает с людьми 😂😂😂
-
😂😅😭
-
-
Joined.
-
Ребята, подскажите плиз:
делаю инсерт в дистрибьютед (12 шардов, распределена по sipHash64(id), смотрит в ReplacingMergeTree)
с SETTINGS insert_distributed_sync=1
и есть подозрение что инсерт-запрос все-же не дожидается завершения и отдает управление скрипту как отлько поставлено в очередь
как проверить / где искать подводные камини? -
Подскажите, пожалуйста, как обновить кликхаус имея rpm пакеты но без доступа к интернету на CentOS
-
?
-
Так чтобы конфиги и все остальное не сломалось
-
забекапьте конфиги, после обновления rpm раскатайте обратно.
А вообще их лучше не править, а оверрайдить через conf.d -
Кого их?
-
конфиги
-
Кроме конфигов что то ещё может сломаться?
-
В идеале еще бы и данные забекапить.
-
А обновлять то как? Yum install?
-
SYSTEM | ClickHouse Documentation
SYSTEM Statements The list of available SYSTEM statements: RELOAD EMBEDDED DICTIONARIES RELOAD DICTIONARIES RELOAD DICTI
-
yum localinstall наверное
-
-
можно попробовать поставить и посмотреть, вернет ли кликхаус управление в этом случае, но тут еще возможно эта команда не влияет при insert_distributed_sync=1
-
У меня кликхаус сервер и кликхаус коммон статик не хотят обновляться, ругаясь друг на друга(
-
ошибка то какая?
-
спасибо, буду пробовать
-
Типа новая версия одного не подходит для старой версии другого и наоборот
-
хороший Insert выполняется стримабл, он просто не видит settings в конце. Настройку через урл или set или профиль надо задать
-
Одновременно надо три пакета перечислить
-
Спасибо🙏
-
спасибо
попробую посетать на коннекте / перед запросом
* но запрос видит сеттинг distributed_product_mode='allow' оттуда-же из сеттингов в хвосте -
А куда можно обратиться с повторяющимся багом, на который никто не ответил в данном канале?
-
Мы видимо про разные инсерты говорим.
-
Путину можно письмо написать, но лучше тикет в гитхаб.
-
спасибо
-
всем привет! подскажите, пожалуйста, почему не обновляется МВ? есть предположение, что, так как записи добавляются построчно, то используемый фильтр автоматически их фильтрует. можно ли как-то это обойти? текст запроса привожу ниже
CREATE MATERIALIZED VIEW retained_users
engine = AggregatingMergeTree order by(
city_id
,initial_date
,retention_date
,retention
)
populate
as
select
city_id
,udate[1] as initial_date
,date as retention_date
,date - udate[1] as retention
,countState(user_id) as retained_users_cnt
from(
select city_id
,user_id
,arraySort(arrayReduce('groupUniqArray', groupArray(date))) as udate
,arrayEnumerate(udate) as dindex
,arrayFilter(date, index -> (udate[index] - udate[1] == 1) or
(udate[index] - udate[1] == 3) or (udate[index] - udate[1] == 7) or
(udate[index] - udate[1] == 14) or (udate[index] - udate[1] == 28) or
(udate[index] - udate[1] == 60) or (udate[index] - udate[1] == 90) or
(udate[index] - udate[1] == 180) or (udate[index] - udate[1] == 360),
udate, dindex) as udate_filter
from table_users
group by user_id
,city_id
)
array join udate_filter as date
group by
city_id
,udate[1]
,date
,date - udate[1]; -
Mv применяется к данным инсерта, таблица не читается
-
Спасибо. Собственно так и думал. Можно это как-то обойти?
-
Ребят, привет!
Запустил optimize table my_table final deduplicate;
смотрю
SELECT *
from system.replication_queue
order by create_time
LIMIT 100
Code: 365, e.displayText() = DB::Exception: Output of TreeExecutor is not sorted (version 20.4.4.18 (official build))
Такая ошибка во всех строках -
с чем может быть связано
-
mv сделан как триггер на инсерт.
Вам нужно что-то другое. Наверное по крону как-то обновлять -
Из-за этого ещё и запросы все стали отваливаться с разными ошибками. Может можно откатить как-то оптимайз
-
Попробуйте system stop merges таблица. Поторм назад старт. Если не поможет то надо детачить таблицы и удалять из зукипера
-
А если не стартовать то состояние будет поломанное?
-
Старт я про system start merges
-
спасибо
-
а вы раньше запускали такой optimize? Какая версия кх была до этого?
-
нет
-
вроде никакого эффекта не оказало
-
is_currently_executing = 1 нет строк
-
20.3.8
-
может stop replication queue можно попробовать?
-
Из зукипера надо удалять этот мерж
-
какие еще есть идеи?
-
-
почему вообще эта ошибка может возникать?
-
у меня были мутации, я удалял часть данных
-
но насколько я понимаю, это не должно приводить к таким проблемам
-
В версии 20.1 удаляли?
-
Zstd
-
20.3.4.10-2 самая ранняя
-
Значит какой-то баг в 20.4
-
я еще не очень понимаю, в каком состоянии сейчас таблица, от мержей ведь не может ничего сломаться?
-
могу я просто переналить таблицу?
-
операция слияния мержей атомарная?
-
да удалите мерж. В зукипере znode типа такого /clickhouse/{CLUSTER}/tables/6/{TABLE}/replicas/{NODE}/queue/queue-0002370007
-
окей, а в самом кликхаусе ничего делать не надо?
-
Detach table / attach
-
окей, спасибо
-
а в каком порядке надо делать detach/attach и удаление из зк
-
Сначала удаление
-
у меня еще висят инсерты не добавленные в очереди
-
я могу их не удалять?
-
привет. Сорри за нубский вопрос.
Есть распределенный во времени поток событий в базу.
Базу хочется правильно бекапить - ка клучше это делать? По планировщику вызывать некую встроенную бекапилку или писать обычный скрипт?
Если бекап таблицы случился одновременно с попыткой записать туда - что будет? -
а если их удалить, то как мне потом синхронизировать реплики? или они сами разберутся?
-
Базу хочется правильно бекапить - ка клучше это делать? По планировщику вызывать некую встроенную бекапилку или писать обычный скрипт?
Зависит от размера базы и куда бекапить.
Для относительно небольших баз clickhouse-backup может подойти
еще можно сделать свою логику через FREEZE table
Если бекап таблицы случился одновременно с попыткой записать туда - что будет?
те данные, что записываются не попадут в бекап -
++
-
clickhouse-backup create <название бекапа> (почитай какие ключи и как тебе подходит)
копируешь /var/lib/clickhouse/backup/<название бекапа> на удаленное хранилище
clickhouse-backup delete <название бекапа> созданный бекап -
Подскажите для каких объёмов clickhouse-backup уже не подходит? И как лучше бэкапить в этом случае?
-
ну у меня на базе с 1тб данными (это размер 1 шарда), пришлось чутка перепиливать clickhouse-backup, что бы данные бекапились по партам и инкременты соответственно по ним же делались.
Но я потом отказался от clickhouse-backup в сторону реплики на ZFS и снапшоты -
а реплика в том же кластере или через copier наливается?
-
она наливается через протокол репликации, но она не в 'кластере'
-
привет в очередной раз)
у кого-нибудь есть предположение, почему размер засечек увеличивается в 2 раза при переходе от строк или enum'ов к LowCardinality? -
-
ну для low_cardinality надо хранить и айдшник в словаре и сам словарь(для каждого парта).
причем в отличии от enum там скорее всего айдишник больше -
размер колонки на диске не меняется относительно enum
только размер файла с засечками -
зачем в засечках хранить что-то из словаря?
-
точнее, при переходе с енама на словарь размер колонки на диске даже уменьшился (сжатый), а разжатый +- такой же
-
А, я подумал про хранение в оперативной памяти.
словарь там хитрый, и их может быть несколько на 1 парт емнип -
-
может быть несколько, если суммарно кол-во записей в словаре превышают сколько-то там
-
а какой размер enum был? UInt8?
-
угу
-
по идее засечки состоят из указателя на начало блока с сжатом файле + расжатом
-
т.е. их размер то не должен был измениться
-
не важно, строки там, словари или числа
-
Other | ClickHouse Documentation
Other Functions hostName() Returns a string with the name of the host that this function was performed on. For distribut
-
знать бы, в каком формате хранятся засечки, я бы просто файлы сравнил)
-
mrk2
-
я лично подумал, что ты говоришь про сам индекс, а не указатели, тогда фиг знает
-
Только мерж.
-
у меня все mrk2 файлы одинакового размера в парте
-
ты сравниваешь размер засечек в одной и той же таблице?
-
а в зк можно как-то отличить мерж от инсерта? или это только по табличке надо найти все id и потом идти удалять?
-
Спасибо !
-
По id
-
у меня 2 таблицы, в одной колонка enum, во второй LowCardinality(String), сравниваю по таблице system.parts_columns
-
конкретно поле column_marks_bytes
-
а кол-во партов одинаковое?
-
нет, но одна из таблиц - подмножество второй по набору данных
я же сравниваю по партициям, а не всю колонку -
ок, а кол-во партов в конкретной партиции?
-
помню, тут обсуждалось, что мутация вида alter table t delete where field in (select ...) - не работает. (нельзя select писать). И у меня действительно не работало
А сегодня обнаружил, что такая мутация на другой таблице проходит...
alter table logs delete where id in ( select id from logs final
where active_size = 0)
Че-то не понимаю...
КХ версии 19 -
да
-
и само кол-во засечек одинаковое (marks)?
-
ага
-
кстати, еще интересная штука
есть колонка Array(String), которую я решил перевести тоже на словари
там column_marks_bytes увеличилось не в 2, а в 1,5 раза) -
Добрый день!
У меня есть таблица вида K -> V, по которой получается очень эффективно забирать по условию where select V where K = x. Но иногда возникает необходимость сделать операцию select K where V = x. Я попробовал min/max и bloom_filter индексы, но они не пропускают никакие парты вообще, судя по логам.
Я настраиваю что-то не так или это ожидаемое поведение и единственное решение — постороить MV/таблицу с обратным ключом? -
min/max и bloom_filter индексы
сильно чувствительны к локальности V, если ее не будет, то они бесполезны и только замедляют
У меня есть похожий случай и я там просто сделал две таблицы с разным ORDER BY -
По крону копируете?
-
нет, MV AS SELECT * FROM table_k TO table_v
-
-
-
так то есть еще set(0)
ngrambf_v1 если ты щас говоришь о том же запросе, то полнотекстовый поиск дороговато выходит, имхо -
У вас изначальная таблица небольшая была, видимо? Или некритично было уже существующие данные потерять?
-
нет, не такой же :)
-
Это было сделано так изначально.
щас таблица примерно 500млрд записей -
а так, никто не мешает перелить старые данные в том, числе
-
clickhouse-copier с source=target?
-
я clickhouse-copier не пользовался, не скажу насколько это оптимально будет
-
-
есть какая то корреляция между K и V?
-
-
Ну это я знаю, но люди от нее не в восторге и сами пилят аналоги, это я тоже знаю)
-
Какого размера таблица?
-
Там миллиардами исчисляются туплы
-
а сколько колонок в таблице? и сколько ты забираешь только 1?
-
4 колонки, забираю 1 по условию на другую
-
-
С каким настройками создавал индексы?
-
ну выглядит так. что самый быстрый по скорости запроса вариант это создать обратную ей таблицу, тк вторичные индексы никогда такой скорости не достигнут
-
-
Ага, были такие мысли, пришел уточнить, может быть индексы не так готовлю
-
INDEX bloom_filter_v tuple(v) TYPE bloom_filter GRANULARITY 4
-
-
-
чутка смущает tuple, но я индексы особо не трогал
-
гранулярность +-адекватная, боюсь в таком случае помочь нечем:)
-
Всем привет! Не подскажите есть ли возможность группировать данные по неделям? Допустим беру дата сет за 3 месяца и хочу разложить его на 16 частей сгруппированных по 7 дней
-
Спасибо, буду знать, что попробовал все :)
-
Dates and Times | ClickHouse Documentation
Functions for Working with Dates and Times Support for time zones. All functions for working with the date and time that
-
toRelativeWeekNum - я так понимаю это то что мне нужно?
-
ну можно конечно еще уменьшить гранулярность, я еще не уверен, если ты альтером добавлял индексы. создаются ли они для всех партов или только для новых
-
ну да, смотря какая "неделя" вам нужна
если вам подходит, то берите -
Я тут искал уже, писали, что если optimize запустить, то индексы создадутся
-
а, ну тогда ок
там вроде была отдельная команда на индексы правда -
а индексы не забыли материализовать?
-
Вот может быть и забыл!
Попробую, спасибо -
по умолчанию только новые данные будут индексироваться, да это многие забывают
-
да спасибо, то что нужно было)
-
а, ну тогда ок
там вроде была отдельная команда на индексы правда -
А подскажите плиз как посмотреть (+ наверн почистить) очередь накопленных асинхронных инсертов?
а то прилетала корявенькая дата (=колонка партицирования)
SYSTEM FLUSH DISTRIBUTED lz.distributed_table
Received exception from server (version 20.1.10):
Code: 246. DB::Exception: Received from localhost:9000. DB::Exception: Received from 192.168.0.9:9000. DB::Exception: Partition value mismatch between two parts with the same partition ID. Existing part: 21060207-20200603_66880_121440_2570, newly added part: 21060207-20200603_1350_1350_0.
0 rows in set. Elapsed: 0.282 sec. -
-
Joined.
-
.bin файлы в папке distributed таблицы
-
Коллеги, день добрый. Подскажите, пожалуйста, или помогите правильно покурить мануал по внешним словарям. Есть таблица из нее нужно вытащить ID и текст. В тексте лежит JSON, от которого нужно только одно значение. Можно ли это значение вытащить сразу, при формировании словаря или логика CH это не позволяет? Или правильно будет забрать весь JSON и парсить его самим CH? Данные берутся из MySQL
-
21060207-20200603 такого не должно быть, это баг. Какую дату вставили и какой DDL у таблицы?
-
можно в expression у атрибута написать выражение.
<attribute>
<name>value</name>
<type>Int32</type>
<null_value>0</null_value>
<expression>assumeNotNull(value)</expression>
</attribute> -
на входе unixtime, прилетело некорректное ~64000
через toDate(64000) →
SELECT toDate(64000)
┌─toDate(64000)─┐
│ 2106-02-07 │
└───────────────┘ -
А там можно вставить что-то вида: JSONExtractBool(JSONExtractString(DATA,'F1'),'F2',F3'))
-
какой-то ужас бесконечный с этим КХ
какого хрена toDate принимает и дни и секунды как число -
ну да, я это и предложил сделать
-
show create table можете показать?
-
Спасибо. Из документации не понял глубину кроличьей норы. Пошел пробовать.
-
заглянул - орда (13к) файлов .bin
это залипшие последующие инсерты?
или только с эксепшеном что свалилось? -
ну в логе КХ все ответы, мне его не видно
-
CREATE TABLE lz.braingame_android_distributed_bigbase12_ets_events (`created_at_dt` Date, `file_dt` Date, `file_hr` UInt8, `created_at` UInt32, `installed_at` UInt32, `adid` FixedString(16), `idfa` FixedString(16), `idfv` FixedString(16), `gps_adid` FixedString(16), `city` String, `country_subdivision` String, `postal_code` String, `session_count` String, `install_finish_time` String, `install_begin_time` String, `app_id` String, `app_name` String, `app_version` String, `app_version_raw` String, `network_name` String, `campaign_name` String, `adgroup_name` String, `creative_name` String, `label` String, `is_organic` String, `gclid` String, `click_referer` String, `android_id` String, `referrer` String, `search_term` String, `country` String, `device_name` String, `device_type` String, `os_name` String, `api_level` String, `sdk_version` String, `os_version` String, `revenue_usd` String, `match_type` String, `activity_kind` String, `event_name` String, `tracker` String, `fb_campaign_group_name` String, `fb_campaign_name` String, `fb_adgroup_name` String, `tweet_id` String, `twitter_line_item_id` String, `connection_type` String, `isp` String, `conversion_duration` String, `last_time_spent` String, `time_spent` String, `lifetime_session_count` String, `source` String, `balance_ver` String, `game_count` String, `time_s` String, `score` String, `block_count` String, `lines` String, `squares` String, `best_score` String, `miss_block0` String, `miss_block1` String, `miss_block2` String, `stage` String, `hints` String, `block_value` String, `remove_ad` String, `count` String, `action` String, `skin_id` String, `prv_skin_id` String, `date` String, `time_05s` String, `day` String, `text` String, `placement` String, `place` String, `networkName` String, `creativeId` String, `orientation` String, `mode` String, `time_1s` String, `line_item_1` String, `line_item_2` String, `type` String, `viewCount` String, `id` String, `reason` String, `connection` String, `screen` String, `app` String, `time_01s` String, `statusCode` String, `errorCode` String, `button` String, `eu` String, `issue` String, `per_user` String, `per_session` String, `interval_renamed` String, `ignore_in_a_row` String, `seq_num` String, `mopub_ilrd_adgroup_id` String, `mopub_ilrd_adgroup_name` String, `mopub_ilrd_adgroup_priority` String, `mopub_ilrd_adgroup_type` String, `mopub_ilrd_adunit_format` String, `mopub_ilrd_adunit_id` String, `mopub_ilrd_adunit_name` String, `mopub_ilrd_country` String, `mopub_ilrd_currency` String, `mopub_ilrd_id` String, `mopub_ilrd_network_name` String, `mopub_ilrd_network_placement_id` String, `mopub_ilrd_precision` String, `mopub_ilrd_publisher_revenue` String, `rewarded` String, `session` String, `applies` String, `lat` String, `personalized_ads` String, `consent_ads_state` String, `consent_easy_state` String, `option_state` String, `pages` String, `region_detection` String, `link` String, `banner_request` String, `banner_loaded` String, `banner_failed` String, `inter_request` String, `inter_loaded` String, `inter_failed` String, `rewarded_request` String, `rewarded_loaded` String, `rewarded_failed` String, `name` String, `level_progress` String, `state` String, `level_id` String, `from` String, `hints_unlock` String, `setting` String, `change_count` String, `tasks` String, `level_number` String, `content_version` String, `download_error` String, `middle` String, `value` String, `balance_version` String, `skip` String, `clickTrackingUrl` String, `test` String, `group` String, `fromScrn` String, `fromCtrl` String, `slideOn` String, `slideTo` String, `monthDif` String, `by` String, `dayDif` String, `month` String, `progress` String, `available` String, `userLvl` String, `cnt` String, `year` String, `game_mode` String, `main` String, `daily` String, `consent_ccpa_state` String, `created_at_micro` UInt64, `source_file_name_for_debug` String, `timezone` String, `impression_id` String, `waterfall` String) ENGINE = Distributed('bigbase12', 'lz', 'braingame_android_shard_bigbase12_ets_events', sipHash64(adid))
-
это не та таблица, нужен DDL от shard braingame_android_shard_bigbase12_ets_events
-
CREATE TABLE lz.braingame_android_shard_bigbase12_ets_events (`created_at_dt` Date, `file_dt` Date, `file_hr` UInt8, `created_at` UInt32, `installed_at` UInt32, `adid` FixedString(16), `idfa` FixedString(16), `idfv` FixedString(16), `gps_adid` FixedString(16), `city` String, `country_subdivision` String, `postal_code` String, `session_count` String, `install_finish_time` String, `install_begin_time` String, `app_id` String, `app_name` String, `app_version` String, `app_version_raw` String, `network_name` String, `campaign_name` String, `adgroup_name` String, `creative_name` String, `label` String, `is_organic` String, `gclid` String, `click_referer` String, `android_id` String, `referrer` String, `search_term` String, `country` String, `device_name` String, `device_type` String, `os_name` String, `api_level` String, `sdk_version` String, `os_version` String, `revenue_usd` String, `match_type` String, `activity_kind` String, `event_name` String, `tracker` String, `fb_campaign_group_name` String, `fb_campaign_name` String, `fb_adgroup_name` String, `tweet_id` String, `twitter_line_item_id` String, `connection_type` String, `isp` String, `conversion_duration` String, `last_time_spent` String, `time_spent` String, `lifetime_session_count` String, `source` String, `balance_ver` String, `game_count` String, `time_s` String, `score` String, `block_count` String, `lines` String, `squares` String, `best_score` String, `miss_block0` String, `miss_block1` String, `miss_block2` String, `stage` String, `hints` String, `block_value` String, `remove_ad` String, `count` String, `action` String, `skin_id` String, `prv_skin_id` String, `date` String, `time_05s` String, `day` String, `text` String, `placement` String, `place` String, `networkName` String, `creativeId` String, `orientation` String, `mode` String, `time_1s` String, `line_item_1` String, `line_item_2` String, `type` String, `viewCount` String, `id` String, `reason` String, `connection` String, `screen` String, `app` String, `time_01s` String, `statusCode` String, `errorCode` String, `button` String, `eu` String, `issue` String, `per_user` String, `per_session` String, `interval_renamed` String, `ignore_in_a_row` String, `seq_num` String, `mopub_ilrd_adgroup_id` String, `mopub_ilrd_adgroup_name` String, `mopub_ilrd_adgroup_priority` String, `mopub_ilrd_adgroup_type` String, `mopub_ilrd_adunit_format` String, `mopub_ilrd_adunit_id` String, `mopub_ilrd_adunit_name` String, `mopub_ilrd_country` String, `mopub_ilrd_currency` String, `mopub_ilrd_id` String, `mopub_ilrd_network_name` String, `mopub_ilrd_network_placement_id` String, `mopub_ilrd_precision` String, `mopub_ilrd_publisher_revenue` String, `rewarded` String, `session` String, `applies` String, `lat` String, `personalized_ads` String, `consent_ads_state` String, `consent_easy_state` String, `option_state` String, `pages` String, `region_detection` String, `link` String, `banner_request` String, `banner_loaded` String, `banner_failed` String, `inter_request` String, `inter_loaded` String, `inter_failed` String, `rewarded_request` String, `rewarded_loaded` String, `rewarded_failed` String, `idfa__hashed` UUID ALIAS CAST(coalesce(UUIDNumToString(MD5(hex(MD5(hex(MD5(nullif(UUIDNumToString(idfa), '00000000-0000-0000-0000-000000000000'))))))), '00000000-0000-0000-0000-000000000000'), 'UUID'), `idfv__hashed` UUID ALIAS CAST(coalesce(UUIDNumToString(MD5(hex(MD5(hex(MD5(nullif(UUIDNumToString(idfv), '00000000-0000-0000-0000-000000000000'))))))), '00000000-0000-0000-0000-000000000000'), 'UUID'), `gps_adid__hashed` UUID ALIAS CAST(coalesce(UUIDNumToString(MD5(hex(MD5(hex(MD5(nullif(UUIDNumToString(gps_adid), '00000000-0000-0000-0000-000000000000'))))))), '00000000-0000-0000-0000-000000000000'), 'UUID'), `android_id__hashed` UUID ALIAS CAST(coalesce(UUIDNumToString(MD5(hex(MD5(hex(MD5(nullif(lower(android_id), ''))))))), '00000000-0000-0000-0000-000000000000'), 'UUID'), `name` String, `level_progress` String, `state` String, `level_id` String, `from` String, `hints_unlock` String, `setting` String, `change_count` String,
-
`tasks` String, `level_number` String, `content_version` String, `download_error` String, `middle` String, `value` String, `balance_version` String, `skip` String, `clickTrackingUrl` String, `test` String, `group` String, `fromScrn` String, `fromCtrl` String, `slideOn` String, `slideTo` String, `monthDif` String, `by` String, `dayDif` String, `month` String, `progress` String, `available` String, `userLvl` String, `cnt` String, `year` String, `game_mode` String, `main` String, `daily` String, `consent_ccpa_state` String, `created_at_micro` UInt64, `source_file_name_for_debug` String, `timezone` String, `impression_id` String, `waterfall` String) ENGINE = MergeTree PARTITION BY (created_at_dt, file_dt) ORDER BY (event_name, adid, created_at) SETTINGS index_granularity = 8192
-
/report
-
!report
-
да как тут))
-
некогда нам, у нас тут насущные проблемы
-
21060207-20200603
ааа я понял, (created_at_dt, file_dt), это два разных поля, это не легаси наименование парта
>Partition value mismatch between two parts with the same partition ID.
>Existing part: 21060207-20200603_66880_121440_2570, newly added part: 21060207-20200603_1350_1350_0.
т.е. это вообще не то что я подумал, ясно. Это просто авторинкремент в зукипере с номером блока внезапно стал 1350 хотя уже был 121440. -
Всем привет! Ребят, внезапно перестались логироваться запросы в query_log. Никто не сталкивался случайно? Клик не ребутали, конфиги не переччитывали
-
конфиг сам перечитывается, КХ следит за изменением файла
-
>не переччитывали
всмысле файлы не трогались -
select * from system.settings WHERE name='log_queries';
-
Я на это и смотрю) Там 0, changed тоже 0. Но в конфигах все ок и запросы до недавнего времени залетали
-
ну, эта настройка может стоять и у профиля пользователя и у конкретного запроса.
-
так что, могло там изменится что то
-
Вот в том то и дело магия какая-то - и в профидле включены и к запросу цепляется log_queries=1
-
хмм, а если отправить такой запрос с нужным профилем и с цеплянием к запросу?)
select * from system.settings WHERE name='log_queries'; -
вообще никакие запросы не логгируются?
-
пробовал уже всякие комбинации, запросы никакие не логируются, приччем если глянуть в system.query_log то перестали это делать в один момент на всех репликах
-
и в тот момент времени ничего с кластером не делалось же?
-
Я бы на самом деле попробовал или дропнуть или транкейтнуть таблицу. но это пальцем в небо
(вроде при дропе) она при след вставках пересоздатся -
Грепнул по логам в тот день, ничего интересного нет - ошибки мержей на некоторых табличках только.
-
Хм подключился напрямую к 8123, мимо чпрокси - все ок.
-
логируется?
-
Да! Дело раскрыто)))
-
ну видимо в chproxy настроечки перезаписываются
-
Дыа, большое спасибо за ответы) Будем смотреть туда
-
@milovidov_an доброго времени суток,
а можно либо
https://github.com/ClickHouse/ClickHouse/pull/10542
либо фикс для
https://github.com/ClickHouse/ClickHouse/issues/10483
в 20.3 замерджить?
сейчас физически невозможно анализировать запрос использующий словари посредством trace логов + логи переполняются...Ability to set logger level for loggers that have non allowed in xml tags symbols by azat · Pull Request #10542 · ClickHouse/ClickHouseChangelog category (leave one): Non-significant (changelog entry is not required) Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Ability to set logg...
-
-
-
-
как партиционирование построено?
-
-
а точнее?
Если например по toYYYYMM(date), то можно where toYYYYMM(date) = toYYYYMM('some_date') -
лучше так не делать, есть тикет с примером где перфоманс хуже чем с where date between ... ...
-
-
нету и не планируется
-
ого, а можно линку на него? Просто звучит крайне странно. Это ж вроде базовый механизм
-
-
where date between ... ... работает прямо
where toYYYYMM(date) = toYYYYMM('some_date') -- пытается угадать через жопу
не совсем такой пример там https://github.com/ClickHouse/ClickHouse/issues/7948 -
есть какието особенности по установке CH на ubuntu 20.04 lts ?
-
в system.parts уже все это есть
-
действительно, тогда придется только выдирать из DDL PARTITION BY xxx
-
что за задача-то такая?
в system.tables есть поле partition_key -
спасибо, выстроился план без геморроя
-
Если задавать конкретно то же выражение что и в PARTITION BY то все работает ок.
Пример для toYYYYMM партиционировантя:
(SelectExecutor): Key condition: (toYYYYMM(column 0) in [202006, 202006])
(SelectExecutor): MinMax index condition: (toYYYYMM(column 0) in [202006, 202006]) -
_part=xxxx?
-
дада, работает пока не найдется пример где не работает
-
фуллскан, _part вычисляется в секции select
-
само значение toYYYYMM нигде не хранится, в парте хранятся значения minmax(date), есть тикет возможно когда-нибудь
-
20.3 -
[V30LC-INCLKHSE1.PW.LOCAL] 2020.06.08 18:07:05.752893 [ 862 ] {75cb8877-cc8a-4a26-b1ea-03f35ab2ea19} <Debug> schema.tablexxx (SelectExecutor): Selected 1 parts by date, 1 parts by key, 13984 marks to read from 1 ranges -
-
20.04 - не LTS вроде, 20.3 LTS
-
да вроде написано что 20.04 LTS
-
-
ой, дайте ссылку на тикет следить, а то мы свой собирались открывать
-
ааа, вы про версию убунты ) "дефолт сити"
я подумал вы про КХ 20.4 -
нет, я про убунту
-
да, я чот не подумал про версии CH :)
-
-
ну простите, не могу помочь, мы живем на rhel/centos
-
ок, может из-за процессоров, но все равно придется все парты перечислять
-
Partition minmax index should also store values about partition expression as a whole, not only its arguments. · Issue #10220 · ClickHouse/ClickHouse
This feature was suggested on 42th ClickHouse meetup, that was held online, YouTube: https://www.youtube.com/watch?v=QQSCn6nbyN8
-
да,
select count(*) from table tt where _part in (select name from system.parts where partition='(202004,146)'); -
проблема что прунинг уже закончится до (select name from system.
-
работает, потому что функция такая. если функция mod, внезапно работать не будет
-
исправлено:
with (select groupArray(name) partsList from system.parts where partition='(202004,150)' and `table` ='tablename' and active) as partsList
select count(*), length(partsList) from vs_cm_data vcd where has (partsList, _part);
...
[V30LC-INCLKHSE1.PW.LOCAL] 2020.06.08 18:28:32.061240 [ 862 ] {772cee9b-3b2e-4784-a0ce-b8fe442c8eab} <Debug> schema.tablename (SelectExecutor): Selected 9 parts by date, 9 parts by key, 67808 marks to read from 9 ranges
...
┌───count()─┬─length(partsList)─┐
│ 551776508 │ 9 │
└───────────┴───────────────────┘
@zulgabis fyi -
Сделаем второе (бэкпортируем убирание излишнего логгирования).
-
спасибо!
-
Всем привет, подскажите пожалуйста. как в кх округлять недели, чтоб первая начиналась с понедельника 00:00:00, а последняя заканчивалась воскресеньем 23:59:59, делаю такой конструкцией, но данные все равно показываетcz уже следующей недели WHERE date > toStartOfWeek(now()) - interval 23 week
AND date < toStartOfWeek(now()) -
не понятно что за тип у date ? дата?
дата сравнивается с датой?
date <= oStartOfWeek(now())-interval 1 day
или с временем? -
у date тип date
-
ну тогда date < toStartOfWeek(now()) должно работать, может время из-за таймзон неправильно получается?
-
а как к таймзоне привести нормальной
-
а где вы время видите?
проблема в том что неясно в какой TZ вы храните и в какой видите.
select sometimecol, toString(sometimecol)
....
...
where ...
есть разница в sometimecol vs toString(sometimecol) ? -
таймзона UTC, я в Москве
-
он просто вам какбэ намекает что пора уже перебираться в UTC таймозну
-
ну очевидно что из поля date нельзя это вычислить, когда понедельник только начался в UTC в москве уже было 3 утра
-
-
-
а можете пожалуйста подсказать из-за чего слететь мог автоинкремент (или это риторический вопрос))) ? я не оч понимаю куда копать
data_version в system.parts это и есть префикс файлов .bin ?
если я их удалю (.bin), машина (на которой вызывался инсерт) выйдет из того цикла в котором пытется снова и снова долить данные (сейчас мультиплицирует - уже ~ x10) ?
или надо будет еще что-то подсказать зукиперу?
* благо сырье еще рядом, и долить именно этот шард возможно -
Aggregatingmergetree/collapsingmergetree. Мне кажется это надо в первую очередь посмотреть.
-
обычно чтобы ответить мне нужно читать логи КХ в течении пары часов, потом еще думать часов 6
-
понял, спасибо, не смею), вы и так изрядно помогли с расследованием
*может подскажете где описана механика асинхронного инсерта? или это в сорсы закапываться и постигать? -
при инсерте Distriubted таблица пишет их на диск в .bin файлы, есть шедулер который обходит каталоги и пытается сделать инсерт в шард
-
а кто-нибудь в курсе, в статистику клика, а именно bytes_read, входит размер словарей?
-
-
Привет! Последнее время стал ловить ошибки вида
Received exception from server (version 20.3.5):
Code: 107. DB::Exception: Received from ip:9000. DB::Exception: Cannot open file /var/lib/clickhouse/data/db/table1/202006_1474_1474_0/field.bin, errno: 2, strerror: No such file or directory: While executing MergeTree.
Кто-нибудь знает с чем это может быть связано?
Есть ощущение, что виной всему truncate. Т.к. до него такого замечено не было.
Проявляется по-разному. Делаешь инсерты - норм, делаешь - еще и при селекте падает такая ошибка.
Truncate на такую корапченную таблицу выручает. Но после проблема может снова проявиться, а может и не проявиться -
-
File not found after inserts · Issue #11466 · ClickHouse/ClickHouse
(you don't have to strictly follow this form) Describe the bug File not found error on insert from select query right after multiple inserts Which ClickHouse server version to use 20.3.5.21...
-
-
а файл такой /var/lib/clickhouse/data/db/table1/202006_1474_1474_0/field.bin есть?
field как в таблице объявлена ? materialized ? default ? -
конкретно тот случай уже убрали танкейтом. Но вот свежий
Code: 107, e.displayText() = DB::ErrnoException: Cannot open file /var/lib/clickhouse/data/system/query_log/202006_3245_3245_0/type.bin, errno: 2, strerror: No such file or directory: While executing MergeTree (version 20.3.5.21 (official build)) -
-
-
Друзья, я понимаю что это не зукипер чат, но все таки. Есть кто-то кто использует КХ+Зукипер и мониторит зукипер ОКметром? У них есть такая фича - замерять replication lag (разница между zookeeper.current_transaction_number.follower и zookeeper.current_transaction_number.leader)
Так вот на одном из кластеров он у меня 10-20 сек, при том что есть кластера с лагом стремящимся к 0.
Я обмазался зукиперовской докой и почитал что нашел в доке КХ, и даже поискал по истории этого чата, но так и не нашел ответа на 3 главных вопроса:
1) Как вытащить номер транзакции с ноды зукипера?
2) Какие факторы кроме сетки могут влиять на задержки в репликации?
3) Насколько критично влияние задержки в репликации Зукипер кластера на репликацию КликХауса? -
так же не знаю связано или нет, но в логах постоянно
2020.06.08 17:22:04.272711 [ 17814 ] {} <Error> void DB::SystemLog<LogElement>::flushImpl(const std::__1::vector<_Tp>&, uint64_t) [with LogElement = DB::MetricLogElement; uint64_t = long unsigned int]: Code: 252, e.displayText() = DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts., Stack trace (when copying this message, always include the lines below): -
-
-
Всем привет!
Выполняю джавой sql команду, получаю спустя ровно 5 минут
Timeout exceeded while reading from socket (XXX): while receiving packet from XXX
socket_timeout выставлен гораздо больше 5 минут, но все равно выкидывает на 5 минутах -
Есть еще send_timeout и receive_timeout - оно вообще в джава классе ClickHouseProperties не прокидывается
-
а socket_timeout нету-ли в jdbc урле ?
-
я отдельно его прокидываю, не в урле
-
я не это спросил
-
нет его в урле
-
это системные таблички, странно что они не успевают мержится, потому что они маленькие, их можно вообще выключить в config.xml если они не нужны
-
Да, я понимаю. Просто проблема не только на системных
-
слишком часто пишете? или диск медленный ?
-
Нет, даже на сценарии 1000 в минуту ломается. Я сейчас не про мерж, а про file not found
-
-
-
вообще-то рекомендуется делать не чаще одного инсерта в секунду в один инстанс КХ.
Я делаю 1 инсерт в минуту. -
Так и есть. Я неверно выразился. 1000 одним инсертом
-
А что может быть file not found?
-
какая там FS ext4 ?
-
Да
-
а field инсертится в insert или заполняется вычислением?
проверьте что у вас на всех серверах совпадают поля между MergeTree и Distributed -
Да, инсертится. И это на одном сервере возникает :( Без distributed
-
начните с апгрейда в 20.3.10.75
-
Надеялся что кто-то сталкивался. До 20.4.х не стоит? Или там нового "наловлю"?
-
Может быть наловите, у нас с оптимайзд непонятное проведение
- 09 June 2020 (151 messages)
-
-
Привет всем. Как из массива достать элемент, если предыдущий элемент соответствует условию?
Например : есть такой массив [29,49,12,45,2 ]
условие: предыдущий элемент должен быть больше 40
Должны получить такой массив: [0,0,12,0,2] -
with [29, 49, 12, 45, 2] as arr
select arrayMap(x -> x>40, arr) as check,
arrayMap((x, y) -> if(check[y-1] = 1, x, 0), arr, arrayEnumerate(check)) as result -
спасибо
-
Всем привет! Подскажите, пожалуйста, а есть ли способ обойти проблему с нехваткой памяти для join-a, помимо добавления памяти на сервер, конечно?
-
обрабатывать меньше данных. Например, разбивать данные на несколько запросов при помощи хешей.
WHERE cityHash64(some_column) % {{chunks}} = {{chunk}} -
спасибо!
-
-
-
-
ms
-
final ClickHouseProperties clickHouseProperties = new ClickHouseProperties();
clickHouseProperties.setSocketTimeout((int) TimeUnit.SECONDS.toMillis(socketTimeoutSeconds));
clickHouseProperties.setConnectionTimeout(socketTimeoutMillis);
clickHouseProperties.setUser(user);
clickHouseProperties.setPassword(password);
clickHouseProperties.setCompress(compress);
clickHouseProperties.setDecompress(compress);
clickHouseProperties.setUseServerTimeZone(true);
clickHouseProperties.setUseServerTimeZoneForDates(true);
clickHouseProperties.setMaxQuerySize(maxQuerySizeBytes);
return clickHouseProperties;
} -
вроде милисекунды
-
-
-
Подключаю ch как linked server к mssql. Вижу все таблицы, но не могу сделать запрос к ним. Пишет что нет прав к колонкам. Select * не работает. У пользователя все права есть
-
Не получается сделать tuple из результатов двух simpleLinearRegression, в чём тут ошибка? (Хотел использовать подобный tuple в CTE выражении, чтобы не писать два запроса)
SELECT (simpleLinearRegression(x, y), simpleLinearRegression(x, 2 * y))
FROM
(
SELECT
number AS x,
number AS y
FROM numbers(2)
)Ошибка
DB::Exception: Syntax error (data type): failed at position 15: Float64, b Float64), Tuple(k Float64, b Float64)). Expected one o
f: LIKE, GLOBAL NOT IN, AS,..... -
Joined.
-
скорее всего тупл не умеет просто в simpleLinearRegression
-
Странно, судя по ошибке ch будто бы видит что возвращаемый функцией simpleLinearRegression тип Tuple(Float64, Float64)
-
ошибка кстати похоже на клиенте
-
это проблема клиента похоже, на playground у меня заработал
-
SELECT (simpleLinearRegression(x, y),simpleLinearRegression(x, 2*y)) FROM ( SELECT number AS x, number AS y FROM system.numbers LIMIT 2 )
https://play.clickhouse.tech/ -
Спасибо, правда это на клиенте ошибка, причём в последней версии тоже. Через http если делать запрос, то ошибки нет. Баг что ли надо заводить
-
Всем привет!
Пытаюсь записать результат кросс джойна в таблицу. Запрос максимально простой, без использования каких либо условий и агрегаций. Практически такой:
insert into a select * from b, c;
Выглядит так, будто КХ пытается построить полное декартовое произведение целиком в RAM. Конечно для этого не хватает памяти. Можно ли както обойти это ограничение? Т.е. указать КХ сразу записывать результат в таблицу, а не строить его в памяти. -
в свежих версиях с этим чуть лучше, но правую таблицу все равно нужно положить в память. попробуйте обновиться
-
-
-
Всем привет! А известно, когда примерно появится поддержка аутентификации в hdfs через Kerberos?
-
-
-
-
-
--join_algorithm Specify join algorithm: 'auto', 'hash', 'partial_merge', 'prefer_partial_merge'. 'auto' tries to change HashJoin to MergeJoin on the fly to avoid out of memory.
-
у нас табло (сервер под виндой делали - в то время драйвер под линукс был с какими-то проблемами)
одбц драйвер + немного кастомизации через xml - вроде работает
но все-равно вылазят иногда неожиданные подводные камни от автогена запрососв -
-
а мессага / стек-трейс?
с теми же кредами из другого чего-нить можете подключиться со своей машины? -
Стектрейса как такогого нет. Так как запускаю из jupyternotebook. из DBeaver подключаюсь без проблем. Креды все верные, в том числе порт
-
порт... я в питоне хожу через 9000 (а в бивере через 8123)
-
Все верно, через 9000. Вот поэтому обратился с вопросом, в чем может быть проблема, если все чреды верные
-
без деталей м.б. что угодно
NAT / настройки пользователя или сервера / неадекватный ресолв имени (если ноутбук на хабе или в ВМ) -
Привет всем! Можно ли данные из вьюшки перелить в таблицу (только один раз)? Подскажите как?
-
Joined.
-
всем привет!
-
Коинишива
-
Joined.
-
Всем доброго дня!
Прошу совета у знающих людей. Возникла следующая проблема. Необходимо произвести резервное копирование таблицы, данные в которой распределены на нескольких дисках. Вопрос заключается в том, как правильно бекапить и восстанавливать такие таблицы.
При бекапе с помощью ALTER TABLE table_name FREEZE PARTITION 'partition_name'; создаются хардлинки в папке shadow на каждом диске.
После чего бекапы со всех дисков удаленно копируются на сервер бекапов.
При восстановлении данных я помещаю эти бекапы в папку detached одного из дисков и с помощью ATTACH PARTITION закидываю данные в таблицу. Однако при таком подходе все данные из бекапа заливаются только на 1 диск. Существует ли механизм, при котором данные из бекапа будут распределяться по всем дискам, согласно storage policy таблицы?
Спасибо -
Всем привет! Подскажите, пожалуйста, можно ли в версии 19.16 безопасно использовать кодеки Gorilla и DoubleDelta? Помнится с ними были проблемы..
-
Друзья, подскажите как без рестарта clickhouse-server изменить уровень логирования с TRACE на ERROR?
-
Коллеги доброго времени суток
Не подскажете ка правильно создать dictionary с UUID в качестве peimay key.
Создаю Dictonary:
CREATE DICTIONARY SalesOfProductsFromStock.UUIDProducts
(
primaryKey UUID,
КодТовара UInt64,
Название String,
ЕдиницыИзмерения String,
Описание String,
Цена Float32
)
PRIMARY KEY primaryKey
SOURCE(FILE(PATH '/var/lib/clickhouse/user_files/SalesOfProductsFromStock/UUIDProducts.csv' FORMAT 'CSV'))
LIFETIME(MIN 0 MAX 300)
LAYOUT(HASHED) ;
Пытаюсь экспортировать CSV-файл
"02420a00-070a-11ea-b547-26fd09492fb4",124,"Карандаш","штук","",234
"02420a00-070a-11ea-b547-26fd0948f418",123,"Ручка","штук","ручка пластиковая",44
Получаю:
Code: 27. DB::Exception: Received from localhost:9000. DB::Exception: Cannot parse input: expected '"' before: 'a00-070a-11ea-b547-26fd09492fb4",124,"Карандаш","штук","",234\n"02420a00-070a-11ea-b547-26fd0948f418",123,"Ручка","штук","ручка пла�': (at row 1)
Row 1:
Column 0, name: primaryKey, type: UInt64, parsed text: "<DOUBLE QUOTE>02420"ERROR -
Начиная с версии 20.1 нужен рестарт
-
мне кажется, что layout нужно сделать complex_key_hashed если у вас ключ не число
-
Версия 20.4.4.18, в логе вижу:
2020.06.09 13:23:01.435085 [ 335 ] {} <Debug> ConfigReloader: Loading config '/etc/clickhouse-server/config.xml'
Но он продолжает трейсить -
Ещё раз прочитайте то что я написал
-
Прочитал! Эх, глаза видят то, что хотят видеть 🙁
-
А этому есть какое-то логические объяснение? Не знаете случайно?
-
Спасибо - помогло!
-
>layout нужно сделать complex_key_hashed
+1
не делайте имена полей киррилицей (по крайней мере у таблиц), на диске имена файлов кодируются через %4564676%353454 и вылетают за максимально возможную длину в ext4 -
кажется был рейс или что-то такое, и это роняло КХ
-
Спасибо.
-
attach переименовывает каталоги, это выполняется мнгновенно и атомарно когда файлы на одном диске.
вы пробовали разложить в detached на разных дисках ?
т.е. attach принципиально не будет атачить файлы с другого диска -
да насчет кириллических имен я в курсе - трудно просматривать /var/lib/clickhouse/data
но иногда это требование не под моей властью
Кстати после Postgres с 64 байтами длина имена базы/файла в ClickHouse поболее будет
256/3 = 85 кириллических символов
В Postgres - 21 кириллический символ -
когда завтра база сломается НАВСЕГДА во время мержа, потому что имя парта стало длинее, сюда не приходите ныть, пожалуста.
-
Принято 😊
-
пытаюсь импортировать данные из сsv файла
clickhouse-client --format_csv_delimiter="," --query="INSERT INTO table FORMAT CSV" < /tmp/data.csv
в файле есть строка KHTML\, like Gecko (экранированная запятая)
выходит ошибка
каким образом можно скормить эту строку?
спасибо -
CSV стандарт имплеминтированный в КХ допускает только двойные кавычки в этом случае "KHTML,"
-
выгружал данные в csv с помощью pgsql
-
pgsql экранировал запятую
-
copy (select from table) To '/tmp/data.csv' DELIMITER ',';
-
я в этом случае TSV выгружал
-
COPY (select * from crash_test) TO PROGRAM 'clickhouse-client --query="INSERT INTO crash_test FORMAT CSV"' with csv force quote *;
-
Всем привет. Пользовался ли кто-либо функцией runningAccumulate?
-
тут в чате примерно 100500 примеров как ей пользоваться, и как выразить тоже самое через массивы и arrayCumSum
-
пасиб большое, я нашёл, сорри, что отвлёк представителей сообщества. Извините, пожалуйста)
-
где гайку покрутить?
DB::Exception: Memory limit (total) exceeded: would use 3.47 GiB (attempt to allocate chunk of 4502616 bytes), maximum: 3.47 GiB (version 20.4.4.18 (official build)) -
а сколько памяти у вас?
<max_server_memory_usage_to_ram_ratio>1</max_server_memory_usage_to_ram_ratio>
или
<max_server_memory_usage_to_ram_ratio>2</max_server_memory_usage_to_ram_ratio> -
на виртуалку выделено 6 гигов :(
-
А что у вас в uname --m?
-
ща
-
x86_64
-
щас разуплотню немношко памяти
-
выдал 12 гигов, проверю
-
так, пока всё идёт как надо
-
ключа max_server_memory_usage_to_ram_ratio ваще не нашёл в config.xml
-
сейчас видимо есть проблема что неправильно считается кол-во памяти которое отожрал КХ
-
скорее всего вендорный конфиг у вас перезатерт своим
-
нет, там ваще дефолтный конфиг, котрый я поправил чтобы слушалось на всех IP адресах и всё.
-
а, и logger.level=error поставил
-
установка свежая вот вчера поставил новую виртуалку
-
Привет!
https://clickhouse.tech/docs/ru/sql-reference/functions/geo/#greatcircleangle
нашел опечатку в документации, в функции в примере указана другая (указана greatCircleDistance, а должна быть greatCircleAngle), куда можно зарепортить?)Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
буду рад помощи по следующему вопросу по Materialized View
есть MergeTree таблица (назовем ее А) на кластере с определенным PrimaryKey и SortingKey
хочу под нее сделать MaterializedView с движком SummingMergeTree и немного другими PrimaryKey и SortingKey
Но при этом необходимо, чтобы она:
1. подгрузила данные, которые есть в изначальной таблице А
2. автоматически подгружала новые данные, которые приходят в А, т.к. данные туда постоянно приходят
Как понимаю, для решения проблемы 1 есть POPULATE, но он "пропускает вставляемые во время переноса старых данных новые данные"
https://www.altinity.com/blog/clickhouse-materialized-views-illuminated-part-1
Поэтому рекомендуется использовать TO, а старые данные руками перенести
Но тут возникает другая проблема — не понимаю, как указать одновременно TO и Engine MV, т.к. КХ ругается на такую конструкцию
Буду рад помощи в том, правильно я понимаю логику подхода... ну и как объяснить КХ, что он должен следить за новыми вставками в таблицу А и использовать кастомный движок
СпасибоClickHouse Materialized Views Illuminated, Part 1Readers of the Altinity blog know we love ClickHouse materialized views. Materialized views can compute aggregates, read data from Kafka, implement last point queries, and reorganize table primary indexes and sort order. Beyond these functional capabilities, materialized views scale well across large numbers of nodes and work on large datasets. They are one of the distinguishing features of ClickHouse.
-
то есть DDL выглядит как
CREATE MATERIALIZED VIEW test_table_mv ON CLUSTER aaa
TO source_table_A
ENGINE = ReplicatedSummingMergeTree('/clickhouse/{cluster}/{shard}/database/test_table_mv', '{replica}', (amount1, amount2))
PARTITION BY day
PRIMARY KEY (pk1, pk2)
ORDER BY (pk1, pk2, sk1, sk2) AS
SELECT
day
pk1,
pk2,
sk1,
sk2,
amount1,
amount2
FROM source_table_A_distributed
WHERE ...filters...
В этом случае падает ошибка в том, что не ожидается ENGINE
Expected one of: AS, UUID, OpeningRoundBracket, Dot, token
При этом в документации явно не указано, что такое невозможно 😞
https://clickhouse.tech/docs/en/sql-reference/statements/create/#create-view
Если убрать TO, то все работает, но при этом пополнения данными не идет (возможно имеет смысл как-то руками указать dependencies_table, но не понимаю что в синтаксисе выше неверно)
СпасибоOverview | ClickHouse DocumentationCREATE Queries Create queries make a new entity of one of the following kinds: DATABASE TABLE VIEW DICTIONARY USER ROLE
-
>одновременно TO и Engine MV
так не нужен Engine -
если у вас to , то у вас таблица уже готова которая будет хранить данные
если to не указан то таблица автоматически будет создана и ей нужен engine -
Ребята, подскажите может у кого-то было. Делаю запрос с LIMIT 1, типа select * from logs limit 1. Конфигурация из двух шардов. И он Висит вечно (уже 3ий день)..... в SHOW PROCESSLIST.
┌─is_initial_query─┬─user────┬─query_id─────────────────────────────┬─address─────────────┬──port─┬─initial_user─┬─initial_query_id─────────────────────┬─initial_address──┬─initial_port─┬─interface─┬─os_user─┬─client_hostn
ame─────────┬─client_name───────┬─client_revision─┬─client_version_major─┬─client_version_minor─┬─client_version_patch─┬─http_method─┬─http_user_agent─┬─quota_key─┬─────────elapsed─┬─is_cancelled─┬─read_rows─┬─read_bytes─┬
─total_rows_approx─┬─written_rows─┬─written_bytes─┬─memory_usage─┬─peak_memory_usage─┬─query──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─thread_ids──────────────────────────────────────────────────────────────────────────────────────────────
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─ProfileEvents.Names──────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─ProfileEvents.Values──────────────────────
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─Settings.Names───────────────────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────────────────────┬─Settings.Values────────────────────────────────────────────────┐
│ 0 │ default │ bfd5094b-33a0-457b-8ef1-09db979f93c7 │ ::ffff:IPADDRESS │ 50272 │ default │ dc4e81e8-7d6b-437a-8604-9b5d025180d9 │ ::ffff:127.0.0.1 │ 40180 │ 1 │ ubuntu │ prod-cl
ickhouse-2b │ ClickHouse client │ 54434 │ 20 │ 4 │ 3 │ 0 │ │ │ 449403.62553614 │ 1 │ 2 │ 168 │
8192 │ 0 │ 0 │ 75517838 │ 96509142 │ SELECT .... -
TO — это таблица, в которую должны попадать данные, верно?
-
да
если у вас to , то у вас таблица уже готова которая будет хранить данные
если to не указан то таблица автоматически будет создана и ей нужен engine -
спасибо
а данные до момента создания просто руками перенести обычным запросом, верно? -
версия КХ? обновляйтесь до последней в своей маджор
-
да
-
20.4.3.16 последняя вроде была.
-
20.4.4.18 последняя
-
Привет!
Мне нужно materialized view.
Проблема в том, что данные прилетающие в таблицу могут содержать время в прошлом(-10/15 минут).
Соответственно если в mw я считаю quantileTDigest по какому то столбцу и временному интервалу - строки дублируются.
Как можно поступить в этом случае? -
MV это триггер на инсерт, оно не читает исходную таблицу
теоритически у вас quantileTDigest со стейтом должны быть за период какой-то и строки должны схлопнутся, и это вообще не должно влиять, поэтому странно
quantileTDigestState у вас ? -
верно, да. но если в одном инсерте пришли данные за 2020-06-09 00:00:00, потом была ещё пачка вставок, а потом снова 2020-06-09 00:00:00
будут дубли, верно? -
нет, без State
-
ну тогда все бессмысленно, quantileTDigestState должен быть
-
дубли? Таблицу MV не читает, и то что дубли схлопываете в таблице или в select-е который в MV не знает, это все зря
-
quantileTDigestState + quantileTDigestMerge спасут, верно я понимаю?
-
ну вероятно
-
спасибо )
-
Joined.
-
После перезапуска кликхауса и зукипера в докер стэке при попытке вставки в них данных через clickhouse_bulk стал получать DB::Exception: Table is in readonly mode, подскажите пожалуйста чем лечится?
-
у таблицы движок репликатед?
-
по запросу SELECT * FROM system.replicas where is_readonly = 1 выдает на таблицах Code: 999, e.displayText() = Coordination::Exception: No node, path: /clickhouse/tables/1/table_name/log
-
да
-
ты volume для zookeeper монтировал?
-
это делается вручную после перезапуска?
-
конфиги вроде не менял
-
zookeeper это тоже бд, и если она в докере и ты ее перезапускаешь, то данные очевидным образом теряются
-
есть под рукой ссылка как это сделать?
-
это надо искать, как правильным образом запускать zookeeper в докере.
Восстановить работоспособность можешь по гайду из доки
https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damagedData Replication | ClickHouse DocumentationData Replication Replication is only supported for tables in the MergeTree family: ReplicatedMergeTree ReplicatedSumming
-
спасибо!
-
To start recovery, create the ZooKeeper node /path_to_table/replica_name/flags/force_restore_data with any content
-
создал файл в контейнере кликхауса touch /var/lib/clickhouse/flags/force_restore_data
-
но чтото ничего не происходит
-
Вы потеряли данные зукипера, вы не можете восстановить из него
-
Смотрите варианты без зукипера
-
привет
-
а какие функции можно использовать для того, чтобы максимально быстро понять если строки в указанном условии?
-
проверить существует ли строки удовлетворяющие WHERE ?
-
как удалить ReplicatedMergeTree когда она не вяжется с ZooKeeper?
-
пишет DB::Exception: Received from localhost:9000. DB::Exception: Can't drop readonly replicated table (need to drop data in ZooKeeper as well).
-
В доке есть инструкция как переделать в mergetree
либо можно снести в директории с данными кликхауса -
-
я сделал таблицу с другим именем MergeTree но Replicated удалить же надо
-
чтобы затем старое имя можно было использовать
-
в /var/lib/clickhouse/data можно найти метаданные и данные (соответствующие директории) и удалить
-
Парни, почему может быть такое, что когда делаешь dictGet ругается на DEFAULT: Authentication failed, при этом все остальные запросы робят нормально
-
Собственно использую дефолтного пользователя без явок и паролей, все словари на clickhouse(не внешние)
-
У тебя default капсом написан при создании словаря
-
Подскажите, пожалуйста, почему при селекте к словарю может возникать ошибка: Logical error: more than two components in table expression?
-
Пытаюсь создать ReplcatedMergeTree после утери данных в Zookeeper докер контейнере, в Clickhouse в итоге ловлю таймаут Code: 999. DB::Exception: Received from localhost:9000. DB::Exception: All connection tries failed while connecting to ZooKeeper. nodes... Timeout exceeded while reading from socket, а в Zookeeper WARN [NIOWorkerThread-19:ZooKeeperServer@1357] - Connection request from old client /10.0.5.4:59764; will be dropped if server is in r-o mode
Как соединение между зукипером и кликхаусом восстановить? -
конфиги не менялись, может ли быть несовместимость версий зукипера и кликхауса после обновления?
-
ты не удалял старую реплицированную таблицу же?
-
удалил
-
в файловой системе метаданные и данные реплицированных таблиц удалил
-
перезапускал
-
вот, начало создавать, пришлось из конфигурации зукипер сервера убрать
-
хотя нет, не убирал
-
уже запутался что помогло то )
- 10 June 2020 (218 messages)
-
-
Joined.
-
-
Joined.
-
бан?
-
/report
-
-
удалось разобраться? у меня такая же :(
-
Словил глюк при копировании таблиц с одинаковой структурой с разницей в движке, исходная MergeTree, приемник ReplicatedMergeTree, INSERT INTO table1 SELECT * FROM table1_replicated; в результате значения одного из полей улетели в другой столбец. Кто-то сталкивался?
-
Всем привет! Подскажите, есть какие-то рекомендации по оптимальному объёму партиций? Как понять что партицирование по месяцу уже слишком жирно и нужно, например, по неделе партицировать. Как не наломать дров и не сделать партиции слишком мелкими.
-
Всем день добрый.
Подскажите, а можно ли как-то сделать таблицу, которая будет дублировать основную таблицу по некоторым правилам?
Хочу сделать дублирующую таблицу с другим ключом сортировки -
Материализованная вьюха может подойдёт?
-
а в ней можно настроить ключи сортировки?
-
чет не могу в документации найти про ключи
-
Нет. Все также сыпет переодически, связываю это с багом по optimize. В гите висит issue открытое. Жду обновы
-
у меня сыпет ток на optimize. А поделитесь ссылкой
-
OPTIMIZE with FINAL should wait for already running merges. · Issue #11309 · ClickHouse/ClickHouse
Otherwise it can just exit quickly and be effectively no-op. We cannot reliably write tests with this behaviour.
-
Она может в любую таблицу данные перекладывать. Это не совсем то же самое что вьюхи в "обычном понимании". В доке точно было
-
Overview | ClickHouse Documentation
CREATE Queries Create queries make a new entity of one of the following kinds: DATABASE TABLE VIEW DICTIONARY USER ROLE
-
не очень похоже на нашу багу. Или все же оно?
-
Как таковой инфы по ошибке я не нашел, но помимо этой ошибки у меня есть проблемы с OPTIMIZE описанные в баге, которые появились после обновления вместе с этой ошибкой. Связано это или нет я не знаю, буду смотерть уже после фикса, если не будет другого ответа.
-
-
что там? секреты кликхауса?
-
в итоге уйдет из группы с уверенностью что ей точно нужен кх для аналитики по статистике продаж
-
Ребят помогите разобраться в следующей ситуации.
У меня есть кластер из 2 шардов по 2 реплики. Когда отправляю запрос в каждую из локальных таблиц, запрос отрабатывает за 3сек, а когда этот же запрос отправляю в Distributed, он отрабатывает за 30 сек -
я честно говоря ожидал что он отработает за х2 по времени ну явно не за х10
-
запрос вида:
SELECT toStartOfMinute(event_datetime) datetime,
count()
FROM nginx.access_log
PREWHERE event_date BETWEEN toDate(toStartOfMinute(now()-3600)) AND toDate(toStartOfMinute(now())-1)
AND server_name = 'www.hello-world.ru'
WHERE event_datetime BETWEEN toStartOfMinute(now()-3600) AND toStartOfMinute(now())-1
GROUP BY datetime
ORDER BY datetime -
Добрый день, подскажите плиз, по какой причине кх не использует всю доступную ему память? Выделено 400Gb (max_memory_usage_for_all_queries, max_memory_usage, max_memory_usage_for_user). В системе свободно более 500 (правда в buff/cache). Запрос съедает где-то 50gb и начинает слать (DB::Exception: Received from stat8:9000. DB::ErrnoException. DB::ErrnoException: Allocator: Cannot malloc 1.00 MiB., errno: 12, strerror: Cannot allocate memory: (avg_value_size_hint = 69.66058823529411, avg_chars_size = 73.99270588235294, limit = 8192): (while reading column uagent): (while reading from part /var/lib/clickhouse/data/ladnl/dnl_log_local/3287_0_2873_8_16121/ from mark 55681 with max_rows_to_read = 8192):
Происходит это только на одной ноде из 8, конфики везде одинаковые, железо практически тоже.
Версия 19.13.6.51 -
С сетью все ок? Попробуйте с шарда1 кинуть по ремоут в шард2.
-
Вем привет! Есть настроенная интеграция kafka и clickhousr/ При подачи нагрузки 150-200Mbit\s в логах clickhouse появляются ошибки```2020.06.10 12:12:44.285160 [ 16839 ] {} <Error> void DB::StorageKafka::threadFunc(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, Stack trace (when copying this message, always include the lines below):
0. cppkafka::HandleException::HandleException(cppkafka::Error) @ 0x1031512e in /usr/bin/clickhouse
1. ? @ 0x1031d1d2 in /usr/bin/clickhouse
2. cppkafka::Consumer::get_offsets_committed(std::__1::vector<cppkafka::TopicPartition, std::__1::allocator<cppkafka::TopicPartition> > const&) const @ 0x10321eb1 in /usr/bin/clickhou
se
3. DB::ReadBufferFromKafkaConsumer::commit() @ 0xd86d927 in /usr/bin/clickhouse
4. DB::KafkaBlockInputStream::commit() @ 0xd864619 in /usr/bin/clickhouse
5. DB::StorageKafka::streamToViews() @ 0xd853e80 in /usr/bin/clickhouse
6. DB::StorageKafka::threadFunc() @ 0xd854920 in /usr/bin/clickhouse
7. DB::BackgroundSchedulePoolTaskInfo::execute() @ 0xd00d455 in /usr/bin/clickhouse
8. DB::BackgroundSchedulePool::threadFunction() @ 0xd00da72 in /usr/bin/clickhouse
9. ? @ 0xd00dbb0 in /usr/bin/clickhouse
10. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x8f667eb in /usr/bin/clickhouse
11. ? @ 0x8f64c33 in /usr/bin/clickhouse
12. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
13. clone @ 0xfe8dd in /usr/lib64/libc-2.17.so
(version 20.3.8.53 (official build))```
Есть мысли с чем это может быть связано? -
-
Joined.
-
Добрый день. Долго гуглил, но не нашел ответа по zookeeper. Может кто-нибудь сказать про конфигурацию серверов под него, а именно сколько место нужно на hdd с вот такими настройками:
tickTime=2000
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=2000
initLimit=30000
syncLimit=10
maxSessionTimeout=60000000
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
preAllocSize=131072
snapCount=3000000
? -
всем привет, на кликхаусе можно сделать в запросе round() чтобы шаг округления был 0.5 и всегда в большую сторону?
то есть 0.25 = 0.5
0.1 = 0.5
0.6 = 1 -
а какие range чисел? min и max?
-
от 0 до 10000
-
умножте на 2, и поделите
-
-
-
можно в теории и на одном if сделать, если сравнивать остаток с 0.5
-
вопрос, что быстрее будет, да
-
Следующий ClickHouse митап онлайн 18 июня https://events.yandex.ru/events/click-house-onlajn-vs-18-06-2020Link
18 июня команда разработки аналитической СУБД ClickHouse вновь проведёт онлайн-встречу с сообществом. Вы сможете узнать о последних изменениях в системе управления доступом в CH, а также о модном сочетании СУБД и объектного хранилища. Вы можете заранее прислать вопросы через форму регистрации или задать их в чате во время трансляции. Ссылку на прямой эфир мы отправим вам на почту в день встречи.
-
None
-
да, вы правы, это уже как реализовано внутри...
-
60 rows in set. Elapsed: 4.633 sec. Processed 3.08 billion rows, 16.75 GB (665.18 million rows/s., 3.62 GB/s.)
-
Ребят. а подскажите плз, кх нормально работает с датой millis? почему-то при импорте данных через csv падает каждый раз на разных строках, будто ждет 10-и значный timestamp вместо 13. То есть несколько тысяч записей с длиной 13 цифр принимает но в какой-то момент падает и пишет
Code: 27. DB::Exception: Cannot parse input: expected ';' before: '658;1.7.1;1.7.2;0.6.8;13
658 - это последние 3 цифры timestamp-а -
а какой тип используется в таблице?
-
DateTime
-
а вот это запрос в Distributed:
60 rows in set. Elapsed: 37.370 sec. Processed 6.30 billion rows, 34.75 GB (168.55 million rows/s., 929.99 MB/s.)
при этом скорость выполнения запроса плавно падает с 3.6Гб/сек до 0,9Гб/сек -
может там какой нить PREWHERE не отрабатывает
-
datetime не умеет в миллисекунды, вам нужен DateTime64
-
Благодарю, щас попробуем
-
проверьте с помощью set send_logs_level='trace' оба варианта.
у нас такого не было...
max_parallel_replicas с семплингом есть? -
select toFloat32(33.7) as num, toUInt32(num) + (num >= (toUInt32(num) + 0.5)) * 0.5
вообще без if, но нужно смотреть что лучше -
учитывая group by не может ли так быть, что он пытается сделать это на инициаторе
-
это не может же вызвать подобного замедления... разве что память кончается и он вываливается в спилл... - но эт надо трейс палить
-
а какой DDL таблицы?
-
-
смотря сколько запросов кидаете в секунду =) а вообще нет.
-
-
То же самое выходит. Вообще не понимаем в чем дело
-
покажите DDL таблицы
-
сюда кинуть?
-
-
DateTime64(3)
-
нужно указать точность
-
Это у меня idea тупит или она у всех не показывает computed columns? И в trace_log вроде сильно больше полей должно быть
-
-
Спасибо, щас попробуем
-
еще dt64 новый тип достаточно, и возможно не все способы вставки работают, нужно проверить
-
спасибо большое, а как в большую сторону округлять, можете с рецептом помочь?
а то математика в голове не складывается такая элементарная -
Joined.
-
можно просто еще раз 0.5 добавить, но вообще лучше тогда на if сделать, возможно
select toFloat32(33.5) as num, toUInt32(num) + if(num >= toUInt32(num) + 0.5,1,0.5) -
спасибо огромное, храни вашу светлую голову господь!
-
Это абсолютно не оно. Вообще не рядом. Откройте свою багу. Никто из разработчиков не вкурсе про вашу проблему
-
моя проблема кстати решилась убиранием DEDUPLICATE из OPTIMIZE FINAL, но для replacing merge tree он и не нужен
то есть получается все работает -
Вообще у кх настраивается длина запроса. Но в вашем случае это вообще не вадно. Правильный Insert обрабатывается другим парсером. Стрим парсером -- ему не важно длина запроса. Он обрабатывает поток и не ждет конца запроса. Вставляя кусками.
-
Я подозреваю что у вас поломаны данные в первичном индексе. Конечно на эту проблему надо посмотреть всем очень внимательно, и она одна из самых страшных и важных.
-
😱 ок, пойду создам задачу
-
Ну ясен пень у вас разный порядок полей в таблице.
Insert into x select * from y -- не смотрит на имена полей
в любой базе. Это про sql -
вообще были какие то проблемы с deduplicate емнип
-
да я уже понял, спасибо ) хотя порядок полей в create не менял вроде
-
Ну и как вы делали create?
-
обычно, с передачей имен и типов
-
в виде списка последовательного же
-
потому и не думал что столкнусь
-
в документации написано что берется по порядку
-
Тогда делайте месячные. Не шучу.
-
Спасибо, кажется понял. По крайней мере теперь понимаю в какую сторону двигаться.
-
Тогда - это в смысле чтоб не наломать дров?
-
Ваш запрос должен за теже 3 сек. отрабатывать