- 01 September 2018 (7 messages)
-
Joined.
-
-
-
-
-
кстати, такой вопрос.
Ранее в чате писали, что массивы это сахар, -
А какие настройки отвечают за коммуникацию с зк? Интересуют реконнекты и т.д. Заметил, что время от времени session has expired и таблица переходит в readonly, но на протяжении нескольких минут нет реконнектов, хотя другие ноды кластера в порядке.
1.1.54385 - 02 September 2018 (19 messages)
-
исправили что-то такое в 1.1.54388
-
супер, спасибо
-
Такая же тема была, когда зк вместе с кх жили, периодически отваливалось с такой же ошибкой. Как отселили - тишь да гладь
-
у нас отдельно
-
-
Joined.
-
Скажите если хочу excel в качестве клиента , то путь один-odbc ? Или есть еще что-то ?
-
-
-
Да. Я вот хочу такой клиент забабахать . Пингую сообщество может кто уже сделал?😁
-
Всем привет! Может кто сталкивался: заливаю через клиент данные из csv накопленные за несколько дней, кх никаких ошибок не кидает, все ок, смотрю результат - количество строк в ряде дней отличается от кол-ва строк за эти дни в csv! Пробую загрузить только за косячный день, все загружает, результат совпадает. Такое ощущение, что когда грузишь пачкой из цсв, ряд строк выкидывается. Движок обычный мердж три
-
У меня у знакомого было, при импорте из цсв типы не совпали и тупо дефолты переписались без ошибок
-
Ну тут не та ситуация, тк отдельным файлом день загружается как надо
-
А включен ли deduplication?
-
У нас было похожее, правда, через драйвер. И не уверен, что проблема точно была в DD, но пропала после того, как отключили.
-
Но зачем ? Чем одбц плох ?
-
1) его нужно ставить под админом - а в корпоративном г. проще иногда отказать от софта чему убедить кучу бюрократов что это не вирус
2) odbc - максимум что позволяет - это накрутить сводные таблицы - а у меня задача в разы шире чем простой пивот -
Joined.
-
- 03 September 2018 (174 messages)
-
Если int64 недостаточно (макс значение для знакового 9223372036854775807), а float использовать нельзя (тут деньги), то вариантов немного - 1) подождать релиза Decimal, вроде как уже в мастере - попробуйте в тестовой версии, он там на 128 битных интах работает. 2) поразрядно хранить и обрабатывать - просто хранение - без проблем, но арифметика будет утомительна из-за ручного обслуживания переполнений.
-
-
нужно ли увеличивать max_memory_usage, для серверов с 64G?
-
Все зависит от запросов
-
Чем больше дать памяти, тем лучше)
-
вроде как это лимит на один запрос, думал может есть какая-то формула от общего размера базы
-
лимит на один запрос - вот и зависит от таких запросов. Если нет join/order by по большой выборке, то можно довольствоваться малым объемом памяти
-
Joined.
-
-
Выглядит просто как отладочное логирование
-
Доброго дня. Подскажите как быть, КХ генерит ~10 гб данных в день, за пару месяцев забивает диск сервака под завязку. Может кто автоматизировал процесс деатача старых данных и их отправку в долгосрочное хранилище? Либо есть какие-то практики как поступать в подобных случаях?
-
Joined.
-
Раньше все работало, но решил поменять схему (т.е. формат логов), на нгинсе сделал новый формат, перезапустил, в кафке удалил все старые очереди, в кликхаусе все грохнул, запустил заново, создал базу, таблицы и...пусто. Кажетсядаже до энжайна кафки в КХ не доходят данные, в саму кафку данные падают, вижу в тспдампе. А как посмотреть в самом кликхаусе не знаю, кроме тупо селект с лимитом. А там пустота
-
Хмм..в сторону КХ тоже идут данные,
-
-
коллеги, подскажите пожалуйста, есть ли способ заполнять нулями отсутствующие данные при группировке по времени? в инфлюксе например есть функция fill(0) при группировке по времени, в кликхаусе подобной функции нет, но есть костыль в виде union all (https://stackoverflow.com/questions/50238568/how-to-group-by-time-bucket-in-clickhouse-and-fill-missing-data-with-nulls-0s)
этот вариант хорош, но только тогда когда группировка происходит только по времени и всё, но что делать если там ещё по трём string полям дополнительно группировка происходит?How to group by time bucket in ClickHouse and fill missing data with nulls/0sSuppose I have a given time range. For explanation, let's consider something simple, like whole year 2018. I want to query data from ClickHouse as a sum aggregation for each quarter so the result s...
-
-
-
А у меня снова вопрос по компрессии. LZ4 по дефолту включалась всегда, или только начиная с какой-то версии? Возможен ли вариант, что база была создана ещё до введения сжатия, и сейчас существует в несжатом виде? Как таковой information_schema, похоже, не существует, и какую-то информацию о базах и столбцах черпать неоткуда. Или я ошибаюсь?
-
SELECT version()
-
Так ведь когда конектишься к базе пишется версия
-
сжатие было вроде всего, был выбор чем именно жать , легко посмотреть на диске открыв файл в просмотрщике
-
спасибо
-
Благодарю!
-
-
Этим запросом можно посмотреть что и на сколько сжато:
SELECT table, name, formatReadableSize(sum(data_compressed_bytes)) AS compressed, formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed, sum(data_uncompressed_bytes) / sum(data_compressed_bytes) AS ratio FROM system.columns WHERE database != 'system' GROUP BY table, name ORDER BY table, ratio DESC; -
Привет. Есть ли в CH способ вынуть время прошедшее с предыдущего события? Т.е. есть таблица вида
date | devId | eventDateTime
2018-08-01 | 100 | 2018-08-01 12:00:00
2018-08-01 | 100 | 2018-08-01 12:10:00
2018-08-01 | 100 | 2018-08-01 12:15:00
Нужен запрос, который вернёт
devId | eventDateTime | fromPrev
100 | 2018-08-01 12:00:00 |
100 | 2018-08-01 12:10:00 | 600
100 | 2018-08-01 12:15:00 | 300 -
runningDifferenceStartingWithFirstValue,runningAccumulate,runningDifference ?
-
Что-то я в документации не могу найти. Есть где об этом почитать или примеры?
-
-
Ok, спасибо
-
-
Коллеги, можно ли в кликхаусе сделать join таблиц без using? то есть просто берём две любые таблицы и надо смёржить всё со всем
-
можно все столбцы в using перечислить
-
декартово произведение?
-
ага
-
сейчас попробую
-
это будет только не декартово
-
Можно добавить в каждой таблице по столбцу, содержащему константу и по нему джойнить
-
не представляю пока как это сделать даже в моём случае
-
то есть по сути будет две таблицы
первая с временными точками сгенерёнными через numbers и нулями -
вторая будет с нужными группировками string столбцов
-
надо смёржить эти две таблицы так чтобы все группы string имели по всем временным точкам
-
как-то так
-
это всё костыли к тому как бы вместо провалов пихать нули в качестве значений ибо я не представляю как сделать иначе
-
select * from (select *, 1 as c from t1) all inner join (select *, 1 as c from t2) using c
-
хм, ну кстати может это и прокатит, сейчас попробую
-
работает) спасибо большое
-
выглядит как костыль конечно, но элегантный))
-
Joined.
-
-
я его даже в доке не увидел, UPD: cross join тоже работает кстати, но по нему доки нету
-
CROSS JOIN not documented · Issue #2857 · yandex/ClickHouse
Full cartesian product is quite usefull simetimes. It's supported in ClickHouse, but not documented.
-
Согласно спецификации, первые четыре байта LZ4 - 0x184D2204. Прошёлся по .bin-файлам хексдампом, не нашёл. Походу Кликхаусом пишется raw stream.
-
Исходники Кликхауса для меня слишком масштабные, чтобы сейчас в них искать точный ответ на этот вопрос
-
Сработало. Благодарю.
-
Ещё вопрос: если задать zstd вместо lz4, данные пережмутся в фоновом режиме, или это требуется вызывать принудительно? Хотя побаиваюсь вообще что-то делать с датасетом на полтора тб.
-
откройте в текстовом редакторе и увидите
-
сжатые там данные или не сжатые ,а у ж чем пожаты это второй вопрос
-
Я так понимаю эти функции нельзя использовать при изменяющихся devId. Если в таблице несколько devId:
date | devId | eventDateTime
2018-08-01 | 100 | 2018-08-01 12:00:00
2018-08-01 | 100 | 2018-08-01 12:10:00
2018-08-01 | 100 | 2018-08-01 12:15:00
2018-08-01 | 200 | 2018-08-01 12:00:00
2018-08-01 | 200 | 2018-08-01 12:05:00
то надо вернуть
devId | eventDateTime | fromPrev
100 | 2018-08-01 12:00:00 |
100 | 2018-08-01 12:10:00 | 600
100 | 2018-08-01 12:15:00 | 300
200 | 2018-08-01 12:00:00 |
200 | 2018-08-01 12:05:00 | 300 -
Привет.
А можно как-нибудь изменить формат логов Кликхауса? Убрать\добавить колонки, изменить формат таймстемпа, всё в таком духе -
Если можете C++ то всё возможно ;)
-
Есть два варианта заполнения пустых дат / временных диапазонов. В обоих случаях требуется для начала создать полный диапазон полностью с помощью запроса типа SELECT today() + number FROM numbers(100). Ну и дальше первый вариант который приходит в голову - это сделать JOIN с настоящими данными. Но в кликхаус JOIN - не всегда наилучшая идея, поэтому я в таких случаях предпочитаю UNION ALL с дальнейшей группировкой результата по времени/дате.
-
Да, тут наверное придется что-то напридумывать, в постобработке результатов, например. Неверной ведь получается только первая строчка после изменения devId, которая должна стать = 0.
-
Ну т.е. что-то типа
SELECT date, sum(column1), sum(column2) FROM (
SELECT date, column1, column2 FROM realtable
UNION ALL
SELECT today() + number, 0,0 FROM numbers(100)
) GROUP BY date -
Я кажется придумал костыль вида if(runningDifference(devId)==0, runningDifference(eventDateTime), 0).
-
я тоже заюзал union all, но проблема в том что у меня ещё 3 поля типа string по которым происходит группировка из-за чего просто union all недостаточно
мне пришлось сначала найти все эти поля и сделать cross join с numbers и потом сунуть в union all -
то есть этот вариант работает только если group by date и никаких других группировок нет
-
Даже тогда JOIN не обязателен, вместо numbers можно использовать range + arrayJoin.
SELECT ... FROM
(
SELECT id1, id2, date, ... FROM table
UNION ALL
select id1, id2, arrayJoin( arrayMap( x -> today() + x, range(10) ) ) as date2
from table
WHERE date=today()
GROUP BY id1, id2
)
GROUP BY id1, id2, date -
Насколько мне известно: указание конфигурации сжатия влияет на новосоздаваемые куски данных. При этом используемый алгоритм сжатия зашит в файлах данных, т.е. расжатие данных всегда происходит тем чем было сжато и конгфигурация на это никак не влияет.
Новые куски данных пишутся при инсертах, или при фоновых слияниях. Т.е. если изменить LZ4 на ZSTD, то фоновые слияния будут пережимать данные в таком темпе который сочтут нужным, но скорее всего если данных много то ВСЕ данные будут пережаты примерно никогда. Можно использовать OPTIMIZE ... FINAL чтобы заставить пережать старые/большие части. -
В случае необходимости считать разность в стролбце внутри групп можно использовать массивы и функции высшего порядка. См. тут https://stackoverflow.com/questions/51856397/clickhouse-running-diff-with-grouping/51873915#51873915Clickhouse running diff with grouping
General Task A table consists of three columns (time, key, value). The task is to calculate a running difference for each key. So, from input --------------- | time | key | value | --------------...
-
Спасибо
-
-
не пачку инсертов, а инсерт пачки нужен
-
что-то типа INSERT .... VALUES (....), (...), (...) ...
-
Грубо говоря, один инсерт - одна новая часть на диске.
-
INSERT INTO table VALUES (1, 'первая строка данных'), (2, 'вторая строка данных'), ..., (100, 'строка данных номер сто');
-
-
Можно в таблицу типа Buffer, тогда немного полегче
-
Но тоже не панацея
-
-
или например
INSERT INTO table FORMAT JsonEachRow
{"id":1,"str":"первая строка данных"}
{"id":2,"str":"вторая строка данных"}
{"id":100,"str":"строка данных номер 100"} -
Одна из особенностей кликхаус - данные нужно вставлять пачками. Нельзя по одной строке. Т.е. или вы напишете один инсерт и потом в нем перечислите 100 тысяч строк для вставки - то это хорошо, а если сделаете 100 тысяч инсертов по одной строке - то это очень плохо.
-
Есть масса разных способов для преодоления этой проблемы. Один из них - это встроенный движок Buffer который лояльно относится к инсертам по одной строке и перебрасывает данные в финальную таблицу по мере накопления. Но он имеет свои ограничения, поэтому его обычно не рекомендуют широко использовать.
-
Ещё один - использование кафки.
-
Ну или любого внешнего софта, который позволит где-то накопить побольше данных перед тем как запихнуть их в кликхаус.
-
А как обрабатывать плохие данные в кафке? Я пытался так сделать и не нашел. Если кликхаусовский движок kafka не может распарсить данные, он просто бесконечно выдает ошибку.
-
Знаю что ответ произвучит "так себе", но правильнее всего не пихать плохие данные в кафку.
-
Если необходима какая-то фильтрация перед КХ - то наверное можно попробовать читать из "плохого" стрима и писать в "хороший" чем-нибудь для потоковой обработки. А кликхаус настроить чтоб читал "хороший".
-
+1. Мы используем раббит, но принцип тот же (для раббита нет коннектора, всё пишем нодом)
-
Насколько я помню, сжимаются блоки с данными Native формата, а всё остальное (всякие номера пакетов и т. п.) передаётся без сжатия.
Сжатые данные устроены так. Они представляют собой набор сжатых фреймов. Каждый фрейм имеет следующий вид: чексумма (16 байт), идентификатор алгоритма сжатия (1 байт), размер сжатых данных (4 байта, little endian, размер не включает в себя чексумму, но включает в себя остальные 9 байт заголовка), размер несжатых данных (4 байта, little endian), затем сжатые данные. Идентификатор алгоритма: 0x82 - lz4, 0x90 - zstd. Чексумма - CityHash128 из CityHash версии 1.0.2, вычисленный от сжатых данных с учётом 9 байт заголовка.
См. CompressedReadBufferBase, CompressedWriteBuffer,
utils/compressor, TCPHandler. -
про заголовки сжатия в КХ ^
-
Низкий поклон за столь подробный разбор
-
Ваши кудосы отправляются в копилку Алексею @milovidov_an :)
-
Приветствую. Подскажите пожалуйста, есть кластер из 4 нод (2 шарда по 2 реплики) хочу на всех 4 нодах открепить партицию в таблице за 1 запрос , нашел ноду с признаком в system.replicas is_leader=1 , есть 2 таблица:
tablename = Distributed
tablename_sharded = ReplicatedMergeTree
делаю так:
alter table database.tablename detach partition ’201807’ и получаю:
DB::Exception: Method dropPartition is not supported by storage Distributed. -
или же alter table detach не реплицируется?
-
ClickHouse client version 1.1.54383.
-
и правильно ли я понимаю что если я хочу открепить партицию на каждой ноде отдельно то нужно делать:
alter table database.tablename_sharded detach partition ‘201807’ на каждой ноде? -
-
понял, спасибо большое
-
-
-
-
UNION ALL если не думать 🙂
-
можно ли использовать haproxy для балансировки между 2-мя репликами?
-
мы используем достаточно давно, проблем не было
-
@Mike_Er не подкините пример с боевого сервера?
-
-
да
-
Это вроде уже давно исправлено
-
То есть вам нужно просто обновить кликхаус 🙂
-
т.е. сейчас он по-дефолту 0 выдает?
-
на версии 1.1.54385 уже выдает
-
на 1.1.54342 ещё нет
-
-
сильно больше версий у меня в продакшене нет 🙂
-
-
Обновите (осторожно, с бекапами или хотя бы FREEZE PARTITION) хотя бы до 1.1.54385 и станет выдавать 🙂
-
-
Я правильно понимаю, что таймзона в toDateTime только для того, чтоб привести время в нужном поясе в качестве стринг,
но она не используется при попытке время привести к секундам?
select
toDateTime(1535979088, 'Europe/Helsinki'),
toDateTime(1535979088),
toInt32(toDateTime(1535979088, 'Europe/Helsinki')),
toInt32(toDateTime(1535979088)),
timezone() -
Время всегда хранится как unix timestamp. Таймзона определяет как переводить человекочитаемое время в этот самый таймстамп и обратно. При вызове toDateTime(.. 'Europe/Helsinki') создается таймстам и в ТИПЕ данных (не в самих данных) записывается что показывать этот таймстамп нужно переводя его в тз Хельсинки.
-
А есть простой способо перевести timestamp в timestamp с учетом часовой зоны?
-
Time stamp же не зависит от часовой зоны, только его представление, разве нет?
-
select count(*) from system.one where 0 settings empty_result_for_aggregation_by_empty_set=0;
SELECT count(*)
FROM system.one
WHERE 0
SETTINGS empty_result_for_aggregation_by_empty_set = 0
┌─count()─┐
│ 0 │
└─────────┘ -
SELECT
toDateTime(1535979088, 'Europe/Helsinki') AS ts_hl,
toDateTime(1535979088) AS ts,
toTypeName(ts_hl),
toTypeName(ts),
toInt32(ts_hl),
toInt32(ts)
Row 1:
──────
ts_hl: 2018-09-03 15:51:28
ts: 2018-09-03 14:51:28
toTypeName(toDateTime(1535979088, 'Europe/Helsinki')): DateTime('Europe/Helsinki')
toTypeName(toDateTime(1535979088)): DateTime
toInt32(toDateTime(1535979088, 'Europe/Helsinki')): 1535979088
toInt32(toDateTime(1535979088)): 1535979088 -
По умолчанию КХ форматирует время с помощью системной таймзоны, при этом есть настройка которая позволяет передавать таймзону "по умолчанию" с клиента. Можно явно указать что определенное поле должно форматироваться с учетом другой таймзоны просто указав её в типе данных.
-
Можно для всей колонки таблицы CREATE TABLE tz_test (ts DateTime('UTC')) ...
-
Ну или в селектах добавлять
-
-
А есть примерное понимание когда будет зарелизена поддержка decimal?
-
Тестовая версия будет в сентябре, примерно
-
Спасибо за информацию
-
thread_number ( Номер потока )
-
а в фигурных скобках {} - query_id.
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Спасибо
-
Столкнулся с интересной проблемой: выгружен файл из кликхауса на другом сервере как tsv, смотрел спецсимволы через vi - действительно tsv.
Вгружается с помощью Clickhouse-Client в кх в таблицу типа Memory - и вот начинаются странности: строки String становятся числами, причём какой-то рандом.
Может, кто-то может объяснить или выразить предположение, отчего так?
И я так понимаю DateTime столбец для Memory движка не нужен же? -
Joined.
-
Ни для какого движка DateTime столбец не является обязательным. Date раньше был нужен для MergeTree но уже примерно год как не нужен.
-
А последовательность столбцов в данных и в запросе INSERT совпадают?
-
ClickHouse не использует LZ4 framing format (способ укладывания сжатых блоков в файл), потому что сжатие с помощью LZ4 в ClickHouse появилось раньше, чем framing format самого LZ4.
-
То есть, вы смотрели не то.
По поводу сжатия - данные всегда сжимаются,
только если в конфиге специально не был прописан метод сжатия none. Про такую возможность мало кто знает и она по большей части бесполезна. -
Добрый день. Кластер из трёх нод, каждая из которых является репликой для своего шарда и для одного из соседних (перекрёстная репликация). При отвале ноды и её переподключении с восстановлением структуры таблиц ошибка "путь в зукипере уже существует". Можно было бы удалять скриптом, но там значение - массив, который нельзя удалять целиком:
replicas:[1,2]
Подскажите, как побороть? -
Joined.
-
Если реплика целиком исчезла, то путь в ZooKeeper нужно удалить вручную перед созданием такой же реплики на её месте.
-
-
-
Привет, а запрос с sample должен ведь работать быстрее, чем без примерно весгда? У меня есть ReplicatedMergeTree в котороым при сэмплинге выше 0.1 скорость ниже чем без сэмплинга, и я вот слегка затрудняюсь понять что происходит
-
Есть несколько причин, почему это может быть:
1) Медленно вычисляется хэш-функция.
2) ключ сэмплирования находится после мелко-гранулированная часть PK
3) Ключ сэмплирования не равномерно распределенный в своем типе данных. -
sipHash64 я использую, это не intHash32 конечно, но он же вроде бы вставку только должен тормозить, нет? sipHash64 от текстового представления uid который id пользователя. Кажется, что оно должно быть достаточно равномрено в логе событий
по поводу 2) не очень понял -
-
Хороший ключ сэмплирования должен быть легким для чтения и быстро вычислим.
Про второй пункт вот пример:
Плохо: ORDER BY (Timestamp, sample_key);
Хорошо: ORDER BY (CounterID, Date, sample_key).
Об этом можно почитать вот тут (https://github.com/yandex/clickhouse-presentations/tree/master/rit2018)yandex/clickhouse-presentationsPresentations, meetups and talks for ClickHouse. Contribute to yandex/clickhouse-presentations development by creating an account on GitHub.
-
Спасибо! 👍
-
Более правильная ссылка:
https://yandex.github.io/clickhouse-presentations/rit2018/ -
Ключ сэмплирования не хранится для каждой строки и будет вычисляться налету.
-
Спасибо, а я уже локально читать начал после git clone, кекеке.
-
-
уже есть лучшие практики как правильно проектировать витрину под СН ?
типа - джойнов как можно меньше - все кладите в витрину и т.д. и т.п -
Joined.
-
Не особо систематизировали. На похожую тему есть доклад с Highload 2017 "эффективное использование ClickHouse".
-
Перенёс
-
Спасибо, нет... В этом и была ошибка - заработался)
-
Кажется, я заставил ClickHouse тормозить
-
наверно, пожалел 2 байта?
-
Это оффтопик!
-
У меня есть несколько процессов, которые вставляют данные через POST - TSV, перед вставкой они делают SELECT 1.
Что-то пошло не так и SELECT 1 стал отрабатывать дольше, чем ClickHouse отвечает, они отваливались по таймауту и через чуть-чуть пробовали ещё раз -
в результате, видимо, этих SELECT 1 накопилось так много, что оно еле ворочается, даже трейсбеки (о том, что не могут записать результат в HTTP response) записываются в лог с тормозами
-
SHOW PROCESSLIST отрабатывал минут 10 и показал 82 запроса, из них - вставки (самому старому - 4000 секунд), остальные - те самые SELECT 1
-
В чём юмор про два байта?
-
известная цитата из доклада Алексея, что два байта... пауза... не жалко.
Был разговор о том как разные данные эффективнее хранить и много прикол про другие отделы яндекса, которые называть не будем -
а, помню что-то такое, хоть и без конкретики
-
https://youtu.be/Ac2C2G2g8Cg
очень крутой докладЭффективное использование ClickHouse / Алексей Миловидов (Яндекс)Приглашаем на Saint HighLoad ++ 2021 20 и 21 сентября 2021, Санкт-Петербург, DESIGN DISTRICT DAA in SPB Программа, билеты и подробности - https://clck.ru/VmKaW -------- HighLoad++ 2017 Тезисы: http://www.highload.ru/2017/abstracts/2992 ClickHouse чуть более года доступен в open-source. За это время накоплен опыт его использования в российских и зарубежных компаниях. В некоторых из них объёмы данных и нагрузки превышают те, с которыми мы имеем дело в Яндексе. Так как ClickHouse является специализированной системой, при его использовании важно учитывать особенности его архитектуры. В своём докладе я расскажу о примерах типичных ошибок при использовании ClickHouse, которые могут привести к неэффективной работе. На примерах из практики будет показано, как выбор той или иной схемы обработки данных может изменить производительность на порядки. Нашли ошибку в видео? Пишите нам на support@ontico.ru
-
https://youtu.be/Ac2C2G2g8Cg?t=20m54s вот, нашёлЭффективное использование ClickHouse / Алексей Миловидов (Яндекс)
HighLoad++ 2017 Зал «Конгресс-Холл», 8 ноября, 15:00 Тезисы: http://www.highload.ru/2017/abstracts/2992 ClickHouse чуть более года доступен в open-source. За...
-
что-то сломалось, будем починить.
- 04 September 2018 (79 messages)
-
Joined.
-
Добрый день, возник вопрос: использую официальный JDBC драйвер КХ, пишу разными потоками в разные таблицы через спринговый JdbcTemplate которому подсунут ClickhouseDatasource, стабильно вываливается ошибка
Code: 373, e.displayText() = DB::Exception: Session is locked by a concurrent client.
Подскажите куда копать? -
Для каждого потока укажите отлельную сессию. КХ не разрешает писать паралельно в рамках одной сессии.
Параметр session_id -
Да, воткните в сервера больше дисков, КХ нормальное долгосрочное хранилище
-
т.е. получается нужно по отдельному датасорсу для каждого потока?
-
Попробуйте отключить сессии в драйвере, указав session_id как пустую строку
-
Хороший доклад
-
мы малюсинький стартапчик в котором количество данных планирует увеличиватся(мы надеемся) и если оно увеличится хотя бы в 10 раз мы будем генерировать 100 гб сырых данных в день, в долгосрочной перспективе мы исчерпаем возможности по увелечению диска. а так сырые данные я преображаю и записываю в инфлюкс(получается очень компактно где-то 5 MB инфлюксовских данных равняются выборке из 100 GB сырых). Но руководство и маркетинг хотят по какой-то причине хранить сырые данные
-
ну там же все жмется, посмотрите какие данные вам не нужны, какие данные лучше разбить на отдельные колонки чтобы лучше жалось
-
а зачем инфлюкс, а не просто в другую таблицу в кх?
-
Инфлюкс умеет continuous query
-
В смысле - сам агрегирует сырые данные в архив
-
-
-
-
Уточните, почему именно в рамках одного коннекта?
-
Спасибо, помогло
-
Убрать задержки подключения-отключения от базы. Надо обработать большой файл, заглядывая в КХ
-
У вас в среднем запрос сколько выполняется? А сколько тратиться на подключение-отключение?
Нагрузка КХ подразумевает что запросов выполняется сравнительно небольшое кол-во. Больше 100 - уже будут проблемы, в независимости что считаете. Так что пока непонятно зачем вам постоянное подключение -
-
Добрый день. Кластер из трёх нод, на каждом ноде две таблицы. Первая - реплика своего шарда; вторая - реплика для одного из соседних (перекрёстная репликация). При записи данные реплицируются в одноимённые таблицы (myTableShard), а не в myTableShardReplica, которые созданы в качестве реплик. Подскажите, пожалуйста, что делаю не так?
CREATE TABLE IF NOT EXISTS myTableShard (
date Date,
unix_ts UInt64
) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/01/myTableShard', 'node1.a', date) PARTITION BY date ORDER BY unix_ts;
CREATE TABLE IF NOT EXISTS myTableShardReplica (
date Date,
unix_ts UInt64
) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/03/myTableShard', 'node1.a', date) PARTITION BY date ORDER BY unix_ts;
CREATE TABLE IF NOT EXISTS myTable AS myTableShard ENGINE = Distributed(clusterName, test, myTableShard, `unix_ts`); -
-
Опубликованы видеозаписи докладов ClickHouse Meetup в Петербурге, который состоялся 16 августа.
Насладиться ими можно на странице мероприятия: https://events.yandex.ru/events/ClickHouse/16-aug-2018/ClickHouse Meetup, 16 августа 2018, Санкт-Петербург — События ЯндексаПриглашаем технических специалистов на ClickHouse Meetup.
-
ZooKeeper: There are 550000 active watches. There must be a leak somewhere - добрый день, ткните пальцем в какую сторону смотреть?
-
слишком много Replicated таблиц?
-
9 таблиц
-
началось после переезда кластера в другой дц, сначала три сервера добавили из нового дц и потом три вывели из работы в старом дц
-
может происходить из-за мертвых реплик?
-
Joined.
-
-
Всем привет
Есть таблицы
- Потребитель Kafka.
- Целевая таблица с необходимой структурой.
- И материализованное представление.
Материализованное представление перекладывает данные из очереди (потребитель Kafka) в целевую таблицу.
Данные поступают непрерывно, и в целевой таблице появляются пачками, в моих тестах через 15 минут.
Для моих целей это очень долго, и я хочу управлять этим временем, сделать этот период поменьше.
Судя по тому что вижу, матерализованное представление пишет данные пачками по 256 МБ, вроде бы.
Сбственно вопрос какими настройками конфигурируется состояние, при котором произойдет запись в целевую таблицу?
Уменьшила min_insert_block_size_bytes в 1024 раза до 262144
На всякий случай уменьшила min_insert_block_size_rows до 1024
Но ничего не изменилось -
-
stream_flush_interval_ms
? -
7.5 секунд по умолчанию, явно не мой случай
-
Тогда уменьшение max_block_size?
-
Спасибо за участие ) Оказывается изменила min_insert_block_size_bytes в другой сессии, всё ок
-
А в каких случаях query_id пишется в лог? clickhouse-client шлёт query_id, но он записывается только в debug логах и уже в самом сообщении, а не в фигурных скобках
-
Кто-нибудь дружил КХ и MySQL, если оба в контейнере? КХ не видит MySQL, пишет
Poco::Exception. Code: 1000, e.code() = 2002, e.displayText() = mysqlxx::ConnectionFailed: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) ((nullptr):0), e.what() = mysqlxx::ConnectionFailed -
https://github.com/yandex/ClickHouse/issues/2169#issuecomment-378851403
https://github.com/yandex/ClickHouse/issues/2508 -
Табличной функцией или odbc?
-
Табличной функцией
-
Как выглядит вызов функции?
-
CREATE TABLE sites (...) ENGINE = MySQL('localhost:3306', 'admin_stat', 'sites', 'root', 'mypass')
-
есть только догадка, что порт не прослушивается или не видится из контейнера
-
Через консольный клиент подлючается
mysql -uroot —port 3306 —protocol=TCP —password -
А мускул и кх в одном контейнере? Если нет то кх локалхост воспринимает как свой контейнер
-
В разных. Я пробовал вместо localhost указывать 127.0.0.1
Возможно в случае разных контейнеров в подключении нужно указывать ip-к контейнера с mysql? -
Так если в разных то надо в КЗ указывать сервер мускула
-
Я делал через докер-композ и в настройках кх указывал алиас который в конфигурации докер композа прописал
-
Можете пример скинуть? Я примерно понял про что вы
-
Т.е. нужно указывать ip-к или имя mysql, которое выдает контейнер?
-
Да, буду за компьютером через час полтора и скину
-
Спасибо, жду. Пока пошёл читать про docker-compose
-
Joined.
-
None
-
-
Пример docker compose с ClickHouse и MySQL есть прямо в интеграционных тестах ClickHouse:
1. https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/helpers/docker_compose_mysql.yml
2. https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/helpers/cluster.py#L257yandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Спасибо, буду изучать
-
Joined.
-
Joined.
-
-
-
-
мы не вставляем
-
Товарищи, подскажите, как оценить оверхед CH? Т.е. если у меня есть некоторый датасет объемом N GB, сколько мне понадобится дисков для хранения этого датасета в CH?
-
Если данные пожаты чем-то - берите столько же. Как правило, КХ жмёт лучше, так что будет запас (для фоновых мерджей и т.п.)
-
Понял, спасибо!
-
ну будет сильно меньше в несколько раз
-
Мы обычно берем примерно 1/5 - 1/10 от объема сырых данных. Но всё зависит от самих данных, некоторые жмутся очень плохо, а некоторые наоборот очень хорошо
-
всем привет!
когда я гружу данные из КХ в Tableau, то часто (чаще всего) строковые данные приходят в усеченном виде. Например, если в КХ лежит строка 'control_group', то в Tableau приедет 'control_g'. Кто-нибудь сталкивался с такой проблемой? -
попробуй более свежие версии odbc драйвера, это уже чинили
-
спасибо за совет, попробую
-
💪
-
Joined.
-
Hi guys. not sure if anyone speak English. I saw roadmap on 2018 Q4 there is an item for distributed join. Does it mean CH will build an exchange operator for data shuffling among nodes?
-
спасибо, это сработало
может подскажешь заодно, что делать с русскими символами? при загрузке в табло из КХ они превращаются в нечто нечитаемое -
По хттп берёте? Кх пишет по умолчанию энкодинг ютф8, но загружали вы возможно совсем другое.
-
Да, по хттп
-
- 05 September 2018 (49 messages)
-
А чё сам то ? Sql-ex.ru сделает из любого менеджера человека 😂
-
Познайте силу делегирования 😂
Да и в любом случае у знающего человека с опытом быстрей и качественней будет результат. Вы так не считаете? -
Познайте силу презрения халявщиков
-
Почему же халявщиков? Я из сообщения понял, что человек готов заплатить.
-
-
Псс поцоны работка есть. Никто не хочет срубить по быстрому баблишко 😂😂
-
В России все кто мог, уже срубили баблишко =)
-
Сергей пантелеевич, это вы?
-
Joined.
-
Joined.
-
Joined.
-
Ребят, здравствуйте) покажите пример использования движка Mysql? в документации не пойму где оно
-
Сервак КХ на RAID10 (12 дисков):
EXT4-fs error (device md1): ext4_validate_inode_bitmap:99: comm clickhouse-serv: Corrupt inode bitmap - block_group = 20065, inode_bitmap = 657457169
Aborting journal on device md1-8.
EXT4-fs (md1): Remounting filesystem read-only
EXT4-fs error (device md1): ext4_journal_check_start:61: Detected aborted journal
EXT4-fs error (device md1): ext4_journal_check_start:61: Detected aborted journal
Кто-то сталкивался? -
-
там нет пример использования :) гуглением и логикой там уже читал
-
прямо пример думаю есть только в тесте https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/test_storage_mysql/test.py#L42yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
аа, оно умеет табличку вставлять, я думал моожно джоин сделать из мускула, жаль) придется костылить
-
с другой стороны никто не мешает делать таблицу и затирать её?
-
Я сталкивался. Возможно из-за глюков раид контроллера, и в ext4 тоже есть баги.
-
Вопрос куда копать? Диски, контроллер или ОС? Может при каких-то определенных условиях проявляется, mount options или интенсивность записи/чтения итд?
-
Привет! Подскажите, почему при использовании OPTIMIZE TABLE ... PARTITION ... FINAL на совсем небольших таблицах (сотни Мб) с репликацией (3 машинки) очень большие задержки (до 10 мин), в то время как на тестовом стенде без репликации всё летает (1 сек).
-
ну вероятность проявления коррелирует с интенсивностью i/o. У меня megaraid. Я находил похожие исправленные баги в ext4 (у меня древнее ядро дебиан9). Можно попробовать xfs. Надо у админов яндекса спрашивать, бывает у них такое на ext4 или нет.
-
-
-
Joined.
-
привет. есть вопрос по появившемуся TRUNCATE. если делать TRUNCATE реплицируемой таблицы, TRUNCATE так же будет сделан на всех серверах, на которых эта реплицируемая таблица заведена?
-
-
добавили в одном из последних релизов
-
-
Э... А чем я обрезал таблицы весной?
-
Кстати, отныне CH можно юзать в облаке, которое сегодня открыл Яндекс)
https://cloud.yandex.ru/Надежное облако для вашего бизнеса — Yandex.CloudВычислительные мощности, сервисы для обработки данных и уникальные технологии Яндекса для вашего бизнеса.
-
Там цена заградительная.
-
Надеюсь, что сделали такую, чтоб страждущие не сожрали сразу всё приготовленное к моменту открытия
-
select из примера ведь не работает? https://clickhouse.yandex/docs/en/interfaces/formats/#capnproto или что надо сделать чтобы capnproto стал output форматом?
name: CapnProto
is_input: 1
is_output: 0
version(): 18.6.0 -
проверил: TRUNCATE происходит на всех реплицируемых таблицах.
-
Пример не работает. Чтобы заработало нужно написать некоторое количество кода в C++. :\
-
-
Там же написано, что надо файлы схемы в папку определённую положить.
-
-
-
-
А можно как-то динамически конфигурировать набор словарей?
-
Например
-
Какой бы мог быть запрос на создание словаря
-
Вы когда словарь добавляете и раскатываете на всех репликах, кх не надо рестартить, он его сразу подхватывает, разве это не динамически?
-
Кстати да, должно сработать
-
А, ещё кстати. кх в докере, а конфиги замаунчены и изменения файла, который снаружи, не прокидываются в конфиг, который в докере. Кто-то с таким сталкивался?
-
Конфиги пользователей у меня перечитываются на лету
-
Надо прокидывать папку. С файлами - это особенность докера.
- 06 September 2018 (111 messages)
-
Доброе утро, все пытаюсь заполнить свое AggregateMT, делал по инструкции https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/clickhouse/SJ9arSTPsKk/3c_jh3NLCwAJ, устанавливал set max_block_size=100000 и set max_insert_block_size=100000 и память выделял 50 ГБ на запрос все равно вылетает с ошибкой нехватки памяти типа
Progress: 181.85 million rows, 29.67 GB (25.12 million rows/s., 4.10 GB/s.) █████████████████████████████████▋ 53Received exception from server (version 18.10.3):
Code: 241. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Memory limit (for query) exceeded: would use 46.57 GiB (attempt to allocate chunk of 131072 bytes), maximum: 46.57 GiB.
0 rows in set. Elapsed: 7.316 sec. Processed 181.85 million rows, 29.67 GB (24.86 million rows/s., 4.06 GB/s.)
вот кусок конфига users.xml
<?xml version="1.0"?>
<yandex>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<!-- Maximum memory usage for processing single query, in bytes. -->
<!-- <max_memory_usage>10000000000</max_memory_usage> -->
<max_memory_usage>50000000000</max_memory_usage>
<max_bytes_before_external_group_by>20000000000</max_bytes_before_external_group_by>
<!-- Use cache of uncompressed blocks of data. Meaningful only for processing many of very short queries. -->
<use_uncompressed_cache>0</use_uncompressed_cache>
<!-- How to choose between replicas during distributed query processing.
random - choose random replica from set of replicas with minimum number of errors
nearest_hostname - from set of replicas with minimum number of errors, choose replica
with minumum number of different symbols between replica's hostname and local hostname
(Hamming distance).
in_order - first live replica is choosen in specified order.
-->
<load_balancing>random</load_balancing>
</default>
<!-- Profile that allows only read queries. -->
<readonly>
<readonly>1</readonly>
</readonly>
</profiles>
... -
-
-
-
Clickhouse в облаке Яндекса - https://cloud.yandex.ru/docs/mdb/quickstart это круто! Я уже правда купил выделенных серверов, а так вариант для старта проекта очень удобный
-
ну блин на старте у всех много данных в целом , а ценники там огого, вчера посмотрел
-
Что за структура MV? Уменьшите размер max_block_size до 8к, например и max_threads в единицу
-
Может пригодится. Обновления ядра с 4.16 на 4.17 на Debian из backports решило вопрос, пофиксили в 4.16.4 (https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.16.4)
-
-
Kirill, спасибо, вот структура
CREATE MATERIALIZED VIEW status_mv12 TO status_amt12
AS SELECT
created_at_d as created_at_d,
group_id as group_id,
user_id as user_id,
master_object_id as master_object_id,
argMaxState(object_id, event_ms_ts) AS last_object_id,
argMaxState(object_complete, event_ms_ts) AS object_complete,
argMaxState(object_complete_success, event_ms_ts) AS object_complete_success,
argMaxState(completed_at_dt, event_ms_ts) AS last_complete_dt,
argMaxState(error, event_ms_ts) AS last_error,
argMaxState(report, event_ms_ts) AS last_report
FROM status_amt12_null
GROUP BY created_at_d, group_id, user_id, master_object_id
у меня почему то возникает ощущение что настройки не применяются, например, я вижу что процентики бегут примерно с одинаковой скоростью независимо от настроек (визуальное ощущение, но я могу ошибаться) -
-
кто то уже юзал облако ?
-
Кстати, отныне CH можно юзать в облаке, которое сегодня открыл Яндекс)
https://cloud.yandex.ru/Надежное облако для вашего бизнеса — Yandex.CloudВычислительные мощности, сервисы для обработки данных и уникальные технологии Яндекса для вашего бизнеса.
-
перезапустил с новыми настройками (max_block_size=1000, max_insert_block_size=1000, max_threads=1) - новая ошибка
↑ Progress: 441.17 million rows, 40.93 GB (6.91 million rows/s., 640.83 MB/s.) ████████████████████████████████████████▎ 64Received exception from server (version 18.10.3):
Code: 241. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Memory limit (for query) exceeded: would use 46.58 GiB (attempt to allocate chunk of 67108864 bytes), maximum: 46.57 GiB: (while reading column error): (while reading from part /var/lib/clickhouse/data/default/object_events_mt12/20180508_20180512_4650_4662_1/ from mark 240 with max_rows_to_read = 1000).
0 rows in set. Elapsed: 64.081 sec. Processed 441.17 million rows, 40.93 GB (6.88 million rows/s., 638.74 MB/s.) -
Дороха выходит пока
-
Хм.. предзаказ тока пока
-
max_bytes_before_external_group_by выставите, например, в 30GB, вы же там группируете и max_block_size в 8192 и попробуйте не все разом писать, движок еще в фоне все помержит
-
Я так понимаю падает на POPULATE? Можно попробовать сделать populate "ручками". Проверьте кстати применились ли настройки (
select * from syatem.settings where changed=1
) для того пользователя которым создаёте mv, особенно max bytes before external group by. -
да, я делаю его ручками по схеме описанной https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/clickhouse/SJ9arSTPsKk/3c_jh3NLCwAJ
-
-
max_bytes_before_external_group_by стоит в 20 ГБ сейчас
-
применились все что я ставил
-
ОК, тогда пишите в несколько запросов, например по дням, и посмотрите хватит ли памяти и сколько он будет есть ее при мержах
-
да, придется так скорее всего
-
-
Joined.
-
Привет! Подскажите, а можно как-то запросом посмотреть все имеющиеся словари?
-
select * from system.dictionaries
-
Спасибо
-
Добрый день, ссылка из документации:
https://github.yandex-team.ru/raw/Metrika/ClickHouse_private/master/doc/create_embedded_geobase_dictionaries.txt
из документации по ссылке:
https://clickhouse.yandex/docs/ru/query_language/dicts/internal_dicts/#internal_dicts
Не рабочая -
подскажите почему может не пускать?
-
netstat -lntp что говорит про порт 8123 ?
-
И, кстати, clickhouse точно на localhost?
-
vps да
-
-
на localhost там, где запускается броузер с tabix, да? ;-)
-
Табикс пытается подключиться к местному localhost и обламывается. А надо подключаться к адресу впс
-
-
спасибо, стучался да к себе, и фаерволом порт был закрыт из вне
-
Если заморачиваться за безопасность - можно пробрасывать порт через ssh, для тестов этого достаточно.
-
Joined.
-
-
Какие есть ограничения на количество столбцов?
Несколько тысяч можно ? -
-
-
-
-
А в insert никакого вычисления нет?
А insert проходит в null таблицу если не создавать MV?
report и error насколько большими по размеру могут быть? -
Если данные есть в таблице, можно ли потом создать новую колонку в ней же?
-
да, PK менять нельзя, просто колонки добавлять и удалять можно
-
Спасибо
-
-
-
-
Joined.
-
-
В следующей версии должно появиться.
-
-
-
-
Круто было б!
-
-
-
уже в мастере ( https://github.com/yandex/ClickHouse/pull/2447 ) Если есть желание - можно пробовать свежие тестовые билды.Feature/suggestions by Tezd · Pull Request #2447 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en This PR adds autocomplete to client for base queries, types, engines, formats, and functions except combina...
-
о, кажется понял. Спасибо!
-
Подскажите кто сталкивался, пытаюсь добавить файл с макросами macros.xml в основном конфинге прописал <macros incl="macros">macros.xml</macros>
Сам файл лежит в /etc/clickhouse-server/conf.d права на месте, внутри
<?xml version="1.0"?>
<yandex>
<macros replace="replace">
<shard>01</shard>
<replica>01</replica>
</macros>
</yandex>
При создании реплицируемой таблицы ошибка
Code: 62, e.displayText() = DB::Exception: No macro shard in config, e.what() = DB::Exception
CH рестартовал, эффекта ноль. -
Доброго дня, если я делаю условие сравнения datetime и date, то
1 кейс работает >=
select * from table where event_time >=toDate('2018-01-01')
2 запрос не отраатывает <=
select * from table where event_time <=toDate('2018-01-01')
ни одной строки не возвращается
кто мне ответит почему? -
просто странное поведение
-
-
-
<macros>conf.d/macros.xml</macros> + reboot сервера
-
Там была бага со сравнением, возможно недопочинили, сделайте issue на github
-
в v1.1.54390 кажется исправили
-
спасиб, думалось я что-то не то делаю
-
Там была бага со сравнением, возможно недопочинили, сделайте issue на github
-
так может версию обновить надо просто?
-
Спасибо, попробую!
-
протестил на версии 18.10.3 - тоже самое:
-
-
Планирую переехать с zookeeper 3.4 на 3.5, стоит ожидать подводных камней?
-
Сказать честно нет особого смысла переезжать
-
Joined.
-
Joined.
-
Joined.
-
FYI У нас появились testing пакеты версии 18.12.6
https://repo.yandex.ru/clickhouse/deb/testing/main/
Пока продолжаем проверку на тестовой среде перед выкладкой в stable. -
Есть способ приведение к типу DateTime строки у которой формат не соответсвует "YYYY-MM-DD hh:mm:ss" ?
-
Функция parseDateTimeBestEffort
-
супер, спасибо)
-
-
-
в INSERT вычисления нет, report и error строки, могут быть в пределах килобайта, но вы правы - инсерт в нулл таблицу не проходит по причине нехватки памяти, это может быть из-за ORDER BY? Просто у events_mt12 уже в PK created_at_d, думал, бесплатно сортировка будет
INSERT INTO status_amt12_null SELECT
event_ms_ts,
created_at_d,
completed_at_dt,
group_id,
user_id,
master_object_id,
object_id,
object_complete,
object_complete_success,
error,
report
FROM events_mt12
ORDER BY created_at_d ASC -
Сортировка не бесплатна, но ее тоже можно вытеснить на диск max_bytes_before_external_sort
-
вставка без сортировки в NULL таблицу прошла, запустил вставку без сортировки в MV, все стало очень медленно, посмотрим как пройдет, потом буду пробовать этот ключик. Спасибо
-
Так и знал что вы от нас что-то скрываете :) В том запросе который раньше показывали не было ORDER BY, и вообще ничего в нем не указывало что он может отвалиться по памяти при включенной группировке на диске. :)
Про медленно - да, INSERT ... SELECT не быстр. Тут как раз настройки размеров блоков могут помогать. -
(или мешать)
-
сорри, я не скопировал INSERT в чатик, надо было сразу это сделать. Вопрос в догонку (наверное, очевидный, но все-таки) - настройки, которые я делаю с помощью SET, только на эту сессию? Все остальные сессии будут использовать конфиг? Например, у меня будет сессия которая будет вставлять данные бОльшими кусками маленькие объемы (типа 1000 записей в секунду) и параллельно я запущу миграцию меньшими кусками и с бОльшими настройками памяти на сессию. Правильно я понимаю, что все должно работать и медленный инсерт не должен тормозить маленькие частые инсерты?
-
да, настройки в SET влияют только на сессию. Инсерты не дешевы (в плане диска и процессора) поэтому во время больших инсертов всё может немного замедляться.
-
возможно ли сделать следующее,
имея одну строку, например
| 100 | 2018-08-01 | 2018-08-31 |
размножить эту строку сделав группировку по дням, т.е
| 100 | 2018-08-01 |
| 100 | 2018-08-02 |
...
| 100 | 2018-08-30 |
| 100 | 2018-08-31 | -
-
-
идея отличная, спасибо
-
Возможно дело в http сервере и в том что он не понимает Transfer-Encoding: chunked
-
все получилось, причина была сортировка в инсерте. Спасибо за помощь
-
-
Спасибо, проверю
-
А зачем это знать? В таблице system.parts смотреть сколько партов. Но до конца оно может никогда не смержится, не обязан.
-
У меня select запрос по AggregateMV работает медленнее чем по оригинальному MT, думал, может это с мержами связано
-
Может в MV строк столько же сколько в оригинальной таблице?
-
в MV процентов на 15-20% меньше (500 mln vs 600 mln, а если брать доп условие WHERE то 12 mln vs 16 mln)
-
Тогда вам этот MV не нужен. Вот если строк будет раз в 1000 меньше.
-
понятно, спасибо
- 07 September 2018 (129 messages)
-
Доброе утро, как максимально быстро вытянуть, например, 10 000 000 записей каждая по 1кб из кликхауса? я посмотрел - capnproto на чтение не поддерживается, а go клиент kshvakov/clickhouse вроде как не поддерживает сжатие. В принципе, наверное, достаточно их читать в режиме стрима отсортированными, так что только TTFB будет критично. То есть получается нужен клиент, который умеет отдавать записи стримом, желательно на go
-
Joined.
-
Go клиент (через database/sql) очень медленный на чтение, все нет времени переписать чтоб можно было напрямую использовать без стандартной библиотеки. На данный момент самое быстрое это читать через clickhouse-client или взять https://github.com/kshvakov/clickhouse/tree/master/lib и написать свое решение для чтения
-
Кто-то сталкивался с тем что на одинковой нагрузке и почти одинаковых железках в реплике, чтение с одной утилизирует 10-20% вычислительных мощностей а со второй - 150-200%
-
даже вставку оставил только на 1й, вторая только реплику получает
-
GitHub - valyala/chclient: Fast http client for SELECT queries in clickhouse
Fast http client for SELECT queries in clickhouse. Contribute to valyala/chclient development by creating an account on GitHub.
-
Сам не пользовался, но коллеги говорят что самый быстрый.
-
-
ребята, а у MATERIALIZED VIEW могут быть свои индивидуальные настройки по блокам?
-
Да
-
Добрый день. Скажите, для MATERIALIZED VIEW потребовалось изменить схему и группировку, alter table естественно не сработает. Какие есть способы для решения этой задачи, если view уже крутится в проде ?
-
DETACH/ATTACH MATERIALIZED VIEW your_mv AS SELECT или лучше сразу создавать МШУЦ на существующую таблицу как CREATE MV TO чтоб можно было спокойно дропать и создавать
-
Думаю, вполне можно использовать такую MV, если в ней будет крутиться достаточно тяжёлая логика вроде разбора длинных строк по регулярным выражениям.
-
А может будет проще просто добавить новые MATERIALIZED столбцы в исходную таблицу
-
С этого места поподробнее?
-
там же не только новые столбцы, но и группировка меняется
-
Ок, тогда вариант с исходной таблицей отбрасываем
-
Понимаете в чем проблема. У нас данные из базовой таблицы будут удаляться. Т.е. будем оставлять данные там за несколько месяцев. И при таком раскладе (с новой вьюхой и удалением старой), мы потеряем старые данные
-
Под въюхой лежит обычная таблица, создайте таблицу с нужной вам структурой и сделайте на нее CREATE MATERIALIZED VIEW MV TO new_table и можно будет обновлять новое въю без удаления таблицы и прочих танцев с бубном, а данные просто перелейте
-
Товарищи, а такое вообще законно?
2018.08.27 15:41:11.969067 [ 11 ] <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 84, e.displayText() = DB::Exception: Directory /.1/clickhouse/data/db/archive/tmp_merge_20180827_20180827_1850553031_1850553061_6/ already exists, e.what() = DB::Exception, Stack trace: -
-
query="INSERT INTO tbl_name FORMAT Values ('2018.09.07 11:58:30','')"
client.execute(query) -
подскажите почему выполняется без ответа?
-
А версия у вас какая? Есть пример для воспроизведения (конфиг сервера/структура)? Вообще странно выглядит.
-
Может так query="INSERT INTO tbl_name Values ('2018.09.07 11:58:30')" ? Запрос не выглядит валидным.
-
на счет валидности, если напрямую отпраивть через tabix то проходит
-
1.1.54388
-
-
print(str(client.execute("SHOW TABLES")) работает
-
На GitHub issue заведите
-
-
Joined.
-
Всем привет, помогите разобраться с проблемой:
есть таблица
CREATE TABLE ws_statistic_test.internal_analytics (
server_id UInt32,
event_date Date DEFAULT toDate('1970-01-01'),
event_time DateTime,
account_id UInt32,
hero_id UInt32,
hero_level UInt32,
hero_class UInt32,
event_id UInt32,
param_1 UInt32,
param_2 UInt32,
param_3 UInt32
) ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/internal_analytics_test',
'2',
event_date,
(server_id, event_date),
8192
)
при отправке запроса
insert into ws_statistic_test.internal_analytics (server_id, event_date, event_time) values (5, toDate('2018-01-01'), toDateTime('2018-01-01 00:00:00'))
в базу записываются данные
если повторить точно такой же запрос, то возвращается ответ 200, но данные в базу не пишутся
с чем связано такое поведение? -
Дедупликация
-
Спасибо
-
-
Circular Replication Cluster Topology in ClickHouse
In some cases, there is a need to configure a distributed cluster with replication but there are not enough servers in order to place every replica on a separate node. It is better to have multiple replicas at the same nodes configured in a special way, that allows to continue executing queries even in the case of a node failure. Such replication configuration can be found in different distributed systems, it is often referred to as ‘circular’ or ‘ring’ replication. In this article, we will discuss how to set up circular replication in ClickHouse.
-
-
-
также создавали разные базы под шарды?
-
-
А как тогда реплицируете? Или же есть резервные ноды?
-
-
-
Есть ли возможность, при группировке вместо аггрегации, создать массив в который положить значения ?
-
groupArray
-
спасибо
-
-
Всем привет, можно ли такое сделать посредством только КХ или надо выгружать данные и городить мап-редьюс. Есть общая таблица в ней есть имя события, ид, время. Данные к примеру такие:
#1, 12345, время1
#2, 12345, время2
#2, 12345, время3
#1, 12345, время 4
#1, 12345, время 5
#2, 12345, время 6
И хочется посчитать средне время между событием 1 и событием 2 -
Те надо посчитать время1-время2, время1-время3 и время4-время6
-
-
Попробуйте runningDifference
-
Проблема как понять что подавать на вход для подсчёта времени. Те время6 надо считать для времени 4 а не для 1 или 5
-
Так отсортируйте по дате и этому номеру
-
В подзапросе. а в самом запросе примените runningDifference
-
Почему 4-6, а не 5-6?
И почему от меньшего большее отнимаете? -
Криво написал, а так да надо от большего меньшее отнимать
-
-
4 а не 5 ТК было событие которое никто не увидел, потом пришло 5 и только потом увидели уже сразу два события. В таком случае считать надо от самого старого времени
-
-
-
-
-
Так номеров куча. Есть миллионы событий как #1 так и #2 и надо получить среднее время реагирования на событие тип 1. Реакция это событие тип 2
-
На основании ваших данных приведите какой результат ожидаете
-
Берём данные у который совпадают ид ,в моем случае это 12345. И надо взять по очереди событие 1 найти все события 2 пока не встретится опять событие 1. И посчитать время реакции. И так для всех данных за день. Потом вернуть среднее время реакции
-
Для моего примера это в2-в1, в3-в1 и в6-в4.
-
Событие 2 идёт от разных пользователей поэтому их может быть много и время считаем для каждого
-
А 5 выкидывать?
-
ТК его увидят вместе с 4, но можно и оставить. Этот вопрос пока ещё обсуждается.
-
Вам намного лучше будет привязывать реакцию к источнику в данных. Иначе как только увеличится запаздывания станет абсолютно непонятно, где на что отреагировали.
-
Так есть ид, которое связывает события.
-
Ну и то что будет много данных тип 1 а потом одно событие 2 то такая работа приложения.
-
С этим ничего не поделать.
-
-
-
Благодарю
-
Кто нибудь использовал пакет clickhouse-driver?
При вставке в поле типа Datetime пакет ругается что у объекта str нет tzinfo.
Timestamp тоже не глотает -
Подскажите, пожалуйста, ещё ничего не знаю про CH, только в процессе развертывания системы под ubuntu, раньше пользовался GA в связке с Analytics Edge. Вопрос такой: как известно, в GA выборка по срезу нескольких измерений (пол, возраст, устройство) может уменьшаться по мере наличия значений в этих изменениях (проще говоря, при срезе 2 или больше измерений, отсутствие данных в измерении приведет к исключению визита из выборки), как обстоят с этим дела в метрике и CH? Можно ли в принципе с помощью CH получить такую выборку по нескольким срезам (их может быть гораздо больше двух), при этом не сокращая ее при отсутствии данных (просто подставляя значение none)?
-
Всё очень сильно зависит от ваших данных, запросов и от того, какую схему вы сделаете
-
Так что только заливать как есть, пробовать, экспериментироватт
-
Ух, это создаёт ещё кучу вопросов) какая зависимость от данных и запросов? Если есть куда направить почитать - такой вариант только приветствуется. Схема, на которой GA вместе с Edge провалились, пол-возраст-устройство-город
-
На сайте КХ, в документации, есть примеры с бенчмарками. Посмотрите как там заливаются данные, сделайте по аналогии. Потом попробуйте повторить ваши запросы на диалекте КХ
-
Спасибо
-
питонячий дейттайм он хочет
-
-
Joined.
-
Не в курсе есть ли пример high order function на несколько действий. А то не понятно можно ли сложную логику туда запихнуть на несколько строчек?
-
Несколько действий это как?
-
Это к примеру в arrayMap(x -> {var y = indexOf(anotherarr, x); var z = x > 10? 5: 9; return x*z-y}, arr)
-
Типа так
-
Они не так работают
https://github.com/yandex/ClickHouse/search?l=SQL&q=arrayyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
Те хочется какой то код писать. А то пока работает только одна операция arrayMap(x -> x+10, arr)
-
Ну да там только одна операция везде
-
-
-
А как
-
-
-
Ага, те разделитель запятая
-
-
Мне надо чтобы внутри где х+10 было много выпажений
-
Это не совсем то. Тк тело функции одна операция
-
Просто цепочка вызовов куда передается массив и операция и опять массив и операция
-
Я же хожу операцию как сложную функцию
-
select arrayMap(x -> indexOf([5,4,3,2,1],x) + 10, [1,2,3,4,5,6,7]) а так
-
Надо это чтобы как то получить из двух массивов один.
Есть [10, 20, 30] и [9,11,12,24,44] хочу их преобразовать чтобы получить пары массив1 + все числа массива 2 больше чем какой то Элемент массив 1 но меньше чем след элемент массив 2. Те результат примера [10,11 ] (10,12) (20,24) (30,44) -
select arrayMap(x -> x * (if(x > 10, 5,9) - indexOf([5,4,3,2,1],x)), [1,2,3,4,5,6,7])
-
Оно все равно получается что одна операция. Те мне чтобы переменные внутри использовать и сохранять некий результат
-
Все ваши примеры это грубо говоря одна длинная операция. А можно ли как то чтобы переменные ещё использовать
-
а где так можно делать?
-
-
Я не говорю что где то можно. Но если есть high order function я уточнял можно ли
-
В тарантул на Луа можно что то писать :)
-
-
-
Да, но насчёт этого вопроса какая то неопределенность. Те можно сделать цепочку вызовов и все ок, а если разбить на куски с сохранением в переменную то уже получается нельзя.
-
Поэтому и пришел уточнить можно или нет
-
-
Мне день тянуть данные на клиент и там делать мап-редьюс. Хотел все переложить на КХ :)
-
День - лень
-
Да и "день" норм был.
-
Это будет мое удивление на следующем шаге :)
-
А такой вопрос.есть число 15
И массив 5, 6,10,20,30 можно ли получить число 10. Те надо найти наибольший элемент который меньше искомого числа -
Можно - делаем arrayFilter и берём последний элемент
-
:) select max(arrayJoin(arrayFilter(x -> x < 15, [5, 6,10,20,30]))) as res
SELECT max(arrayJoin(arrayFilter(x -> (x < 15), [5, 6, 10, 20, 30]))) AS res
┌─res─┐
│ 10 │
└─────┘ -
в таком массиве [10, 6, 1, 20, 30] не прокатит
-
с сортировкой прокатит
:) select arraySort((arrayFilter(x -> x < 15, [5, 6,10,20,30])))[-1] as res
SELECT arraySort(arrayFilter(x -> (x < 15), [5, 6, 10, 20, 30]))[-1] AS res
┌─res─┐
│ 10 │
└─────┘ -
Да у меня массив уже отсортированый
- 08 September 2018 (30 messages)
-
Вместо x+10 можно написать f(x)
И цепочку вызовов подставить. -
А как кастомную функцию писать?
-
-
Коллеги, доброе утро!
Подскажите, как решить такую проблему?
<Error> Application: DB::Exception: Cannot create table from metadata file /var/lib/clickhouse/metadata/asoup//SPL3314_REP.sql, error: ZooKeeperImpl::Exception: Can't get data for node /clickhouse/tables/01/SPL3314_REP/metadata: node doesn't exist (No node)
Кликхаус не стартует -
Aaaa :)
-
Перенести метаданные и данные в другое место, стартануть КХ, перенести данные в detached новой таблицы и сделать attach для всех партиций.
-
Кажется у меня в зукипере все данные потерялись, это очень плохо?
-
Нет, данные из-за этого не потеряются, но нужно будет аккуратно их переместить из /var/lib/clickhouse/data, создать таблицы заново, и приатачить партиции
-
Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Спасибо, Кирилл, буду пробовать
-
Подскажите, что означает ошибка
cannot write to ostream at offset ? -
Раз никто не отвечает, попробую я :)
У вас слуйчано место на диске (df) и inode (df -i) не закончились? -
Здравствуйте. Подскажи, кто-нибудь имеет опыт миграции с одного кластера ZooKeeper на другой и как это можно сделать, чтобы не потерять данные? Рассматриваю вариант с вводом новых участников кластера и вывода старых после синхронизации.
-
загуглил что это такое, вот результат, место есть
-
У меня 2 шарда по 2 реплики. Начал с первой ноды кликхауса, переместил данные и метаданные в другой каталог. Создал replicated таблицу, скипировал данные в папку detached этой таблицы. Пытаюсь выполнить ALTER TABLE {table_name} ATTACH PARTITION . Ругается на неверный синтаксис.
Если пишу запрос вида ALTER TABLE {table_name} ATTACH PARTITION 201801 то, выполняется, но данные в таблицу не приходят
Подскажите, куда посмотреть? -
первый синтаксис не верный
-
данные надо было бы через детач отсоединить
-
ну и тупо посмотреть переместились ли данные из папки детач
-
у меня данные в зукипере потерялись, пришлось заново создавать таблицу, не было возможности сделать detach, кликхаус не запускался
-
А как папки называются? Может нет партиции 201801?
-
-
20180129 пробовал
-
ну видно что аттач не прошел
-
да, а как можно понять причину? в лог ничего не пишется в момент выполнения аттача
-
о, вот в таком формате получилось приаттачить данные
ALTER TABLE {table_name} ATTACH PART '20180129_0_53_5' -
У вас партиционирование по дате, значит названия партиции должно было быть '2018-01-29'
-
у меня вот так PARTITION BY toMonday(toDateTime(ts))
-
Я и говорю, у вас кастомный ключ партиционирования по дате, если сейчас посмотрите в system.parts то увидите как строятся в этом случае имена партиций
-
ага, понял, спасибо
-
Joined.
- 09 September 2018 (1 messages)
-
Joined.
- 10 September 2018 (122 messages)
-
Может быть кто-то знает как заставить КХ "забыть" о словаре без растарта? Удаление файла с конфигурацией не помогает...
-
SYSTEM RELOAD DICTIONARIES - тоже.
-
Drop table?
-
Вот с DROP TABLE все и началось... :) Был нужен временный словарь, быстренько запилил таблицу с данными (внутри КХ) и конфиг словаря. Потом словарь перестал быть нужен, таблицу и конфиг словаря удалил, а КХ теперь каждые пару сек пишет в error_log сообщение мол " Failed reloading '<удаленный словарь>' external dictionary: Code: 47, ". Рестартовать "по пустякам" не хочется т.к. КХ минут 5 стартует.
-
-
Мне приходилось руками удалять из Zoo и ребутать (возможно и без ребута сработает, но мне так было спокойней )
-
Зукипера там нет. Так и планировал. Удалить файл с мутацией и ребутнуть
-
-
-
Спасибо!
-
У нас ещё версия, которая умеет мутации только для replicated)
-
-
ALTER MUTATION :D
-
Задавал этот вопрос на последней конференции, говорили, что надо бы сделать такой механизм :)
-
-
Я помню :)
-
Я в таком случае создаю словарь, который фиксит ошибку, типа смотрит на пустой файл или select where 1=0. Чтобы хотя бы ошибок не было в логах и системах мониторинга.
-
Joined.
-
Clickhouse одну merge_tree таблицу распределил на 548827 файлов.
Количество столбцов - 11, строк - 10 000, вес таблицы - 1.26 мб.
Merge_tree таблица создавалась с параметрами по умолчанию, описанными в официальной документации.
Файловая система дирректории Clickhouse - 'ext4'(LINUX)
Насколько нормально такое поведение Clickhouse?
Возможно ли ограничить или сократить количество создаваемыех файлов на одну таблицу; если да, то чего это нам будет стоить? -
-
Может быть вы каждую строку вставляли отдельным инсертом?
-
Это не нормально, скорее всего вы что-то сделали неверно. Если сделать всё верно то все ваши данные должны лежать примерно в 30 файлах.
-
Joined.
-
Кто-нибудь сталкивался с подобной ошибкой ? не могу понять в чем дело, в консоли запрос работает
-
Возможно, данные грузятся через ETL инструмет, коннектится он к CH через JDBC драйвер.
Количество строк в блоке инсерта, честно говоря, мне неизвестно, нужно будет покопаться, найти.
Благодарю за интересное предположение. Возможно ETL и инсертит каждую строку отдельно. -
Ну и второй вопрос какое используется партиционирование данных? Если каждая строка попала в одтельную партицию - то тоже будет очень много файлов.
-
Пробовали играться с параметрами таблицы(гранулярность, партиции, order by, sample)- не помогло, количество файлов все равно в районе полумиллиона. Та же самая таблица на движке Log занимает 24 файла.
-
даже если инсёрты отдельные (а что, КХ уже умеет вставку одной строки? раньше вроде нельзя было, только батчи), то мерджи потом объединят их. тут же, видимо, данные распределились и остались. заметьте, что там файлов больше, чем строк*колонок. даже хз, откуда такая амплификация. либо что-то недоговаривают о ситуации
-
-
А какой ETL если не секрет? Используем Pentaho, проблема очень просто решается
-
Pentaho
-
Могли бы поделиться решением?
-
Лучше в личку ибо не имеет отношения к клику
-
Joined.
-
@blinkovivan а можно вот такое реализовать в ODBC? https://github.com/Microsoft/DataConnectors/blob/master/docs/odbc.md
-
-
Сообщение о базовой ошибке: ODBC: ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
DM_ErrorDetailNameCode_UnderlyingHResult: -2147467259
Microsoft.Data.Mashup.ValueError.DataSourceKind: Odbc
Microsoft.Data.Mashup.ValueError.DataSourcePath: dsn=clickhouse_ansi
Microsoft.Data.Mashup.ValueError.Reason: DataSource.Error -
Подскажите пожалуйста alter table для shard таблиц нужно делать для каждой ноды отдельно а потом сделать alter table on cluster для distibuted таблиц?
-
Если речь про добавить/удалить столбец, то нужно выполнить его для каждой таблицы с данными (или для одной реплики каждого шарда, если используется репликация), а потом выполнить тот же ALTER для каждой Distributed таблицы. Оба шага можно делать либо вручную, либо с помощью ON CLUSTER.
-
насколько я помню кто-то писал, что у него получалось из Power BI подключиться
точно всё корректно сконфигурировано и используются самые свежие драйвера и clickhouse-server? -
само дектоп приложение нормально работает (особенно с последней версией драйвера), проблема в настройке обновлений через шлюз
-
то есть получается если у меня например 2 шарда с 2мя репликами, то нужно на каждой ноде выполнить alter table для таблицы _sharded после этого сделать alter table tablename on cluster…. для distibuted
-
-
да
-
пробовал сделать вот так:
alter table db.tablename_sharded on cluster cluster1 add column count UInt16 default 1 after column_name;
получил в ответ:
An error occured before execution: Code: 371, e.displayText() = DB::Exception: Table tablename_sharded is replicated, but shard #1 isn't replicated according to its cluster definition. Possibly <internal_replication>true</internal_replication> is forgotten in the cluster config., e.what() = DB::Exception -
у меня стоит: <internal_replication>false</internal_replication>
-
это мой первый кластер по этому мог ошибится в конфигах 🙂
-
-
значит скоро будет true 🙂
-
спасибо
-
А шлюз в каком режиме запущен? Когда я это дело пробывал, было требование запускать его в персанал мод.
-
enterprise, с другими источниками вроде нет проблем
-
-
На свежих ODBC такая ошибка возникает, когда в результате в полях есть NULL. ifnull-те значения в селекте, либо откатитесь на драйвер, зарелизиненный до августа
-
-
Спасибо. Я только что обновил ClickHouse сервер до 18.10.3 и поставил вот этот драйвер
-
-
Буду еще раз пытаться
-
думабю поможет
-
Проблема появилась с августовских релизов
-
теперь появилась другая проблема, после того как сделал alter table db.tablename_sharded on cluster cluster1 add column…; все прошло хорошо, теперь пробую для distributed сделать:
alter table db.tablename on cluster cluster1 add column…;
и получаю:
An error occured before execution: Code: 371, e.displayText() = DB::Exception: Table tablename isn't replicated, but shard #2 is replicated according to its cluster definition, e.what() = DB::Exception -
в чем может быть проблема?
-
-
-
Я так понимаю, это единственный приемлемый на текущий момент вариант? Строка однозначно хуже?
-
Если вам не нужна большая производительность на этом столбце - можно и в строке. Но обычно столбец активно используется.
-
Мы просто храним 2 таймстампа. Один в "честной" UTC, другой - тоже в UTC, но там время со смещением клиента записано.
-
Если одну из второй вычесть можно выяснить какое в тот момент времени было смещение таймзоны от UTC.
-
При этом в "локальном" времени клиента время может идти неравномерно - например перескакивать при переводе часов на зимнее/летнее.
-
При этом всякие функции работы со временем корректно работают на обоих полях
-
Если вам не нужно хранить много разных таймзон - то вообще проблем нет никаких. Если много разных - то кроме того варианта который выше можно хранить в каждой строке смещение от UTC, и добавлять поправку "на лету". Можно не хранить, а держать эту поправку в словаре для каждого клиента.
-
-
У меня таймзон 10-15 по городам из словаря. Наверное проще для всех использовать нормализванное время (по зоне сервера) а смещение брать по городу
-
Если не нужно одновременно данные для разных таймзон обрабатывать - то можно просто в селект добавлять нужную таймзону.
-
Так к сожалениию не выдет. Выброка идет именно по срезу с большим кол-вом городов
-
Тогда или два таймстампа или таймстами+смещение.
-
Смещение можно в словаре
-
-
-
А зачем нужно хранить время не в UTC? Я 20 лет занимаюсь только БД и никогда не мог понять зачем это надо?
-
Это как если хранить температуру в 3 полях, в кельвинах, цельсиях и фаренгейтах, вот нафига?
-
У базы 100 клиентов из разных городов. Напишите запрос - в какое время (локальное) они охотнее всего делают инсерты :)
-
Т.е. например в 17 часов 26 минут :)
-
При этом эти "локальные" 17:26 могут случиться в 18:26 19:26 или даже 23:56 :)
-
ну короче суточная активность с учетом локальных таймзон. Например на локальных суточных графиках оч. хорошо видно как "просыпаются" люди в одтельных тайзонах. Если же всё посчитать в UTC (когда разные таймзоны наложены друг на друга) - получается такая непонятная кардиограмма и не понятно кто и во сколько "проснулся" :)
-
Т.е. из таймзоны вычисляется местоположение? Т.е. странно это, в чехии просыпаются в 5 утра, в тойже таймзоне в Росси в 7.
-
-
иногда это бывают даже совсем идиотские истории про "конец дня" который случается в разных городах в разное время.
-
Ну вычислять местоположение по таймстампах - это немного другая история.
-
Обновил сервер ClickHouse и установил новый ODBC драйвер версии 2018-09-03 и все.
Проблема ODBC: ERROR (Cannot interpret NULL as int64: invalid stoll argument" РЕШЕНА. -
Я вчера улицу перелшел, оказался в другой провинции и время сдвинулось на час, а в булочной на другой стороне не сдвинулось 🙁
-
Речь как раз и шла о том, чтобы хранить время в таймзоне сервера, но при выборке опираться на таймзону города и относительно ее вычислять смещение
-
Не сдвинулось. Но булочная была закрыта. Рановато :P
-
Потому что она в другой таймзоне
-
:)
-
А теперь задача: напишите запрос сколько денег потеряла булочная сравнивая среднесуточную активность пользователей в булочных с суточной активностью пользователей в этой конкретной булочной. :) И как изменились бы её доходы если бы она открывалась на час раньше. Всё это с учетом информации о том что через дорогу живет в два раза больше людей в другом часовом поясе.
-
т.е. у каждой булочной она своя система таймзон, я не понимаю как TZ и локальное время одной булочной применить к другой, т.е. мы поймем что для Чехии надо открываться в 5 и начинать печь булки в 3, проблема в том что для Росии это неверно,
я согласен, для анализа это проще чем использовать UTC + (местоположение булочной и покупателя). -
-
-
спасибо,
Table table_rep is replicated, but shard #2 isn't replicated according to its cluster definition. Possibly <internal_replication>true</internal_replication> is forgotten in the cluster config.
необходимо прописать internal_replication или на живом кластере это уже не прокатит? -
-
-
а это и есть МТ таблица =(
-
-
Можно прописать, а можно просто ручками на каждом шарде запустить
-
вариант ручакми знаю, хотелось более ленивого)
-
-
-
-
Почитал по диагонали: звучит скорее как разработка плагина к Power BI на C#, от ODBC там только тот факт, что он в конечном счете будет использоваться для передачи данных...
-
ага (глянул внимательнее)\, изначально сложилось впечатление что это спецификация драйвера должна быть какая то особая.
-
-
Лучше использовать chproxy - https://github.com/Vertamedia/chproxy . Он лучше осведомлен о специфике запросов к clickhouse
-
-
коллеги, если найдутся сочувствующие помогите запилить DirectQuery коннектор КХ для Power BI на основе: https://github.com/Microsoft/DataConnectors/tree/master/samples/ODBC/SqlODBC =)
-
-
Коллеги, добрый вечер!
Одна нода кликхауса не стартует с ошибкой:
<Error> Application: DB::Exception: Shard address 'detached' does not match to 'user[:password]@host:port#default_database' pattern
Подскажите, куда смотреть? -
Удалите detached из директории disributed таблицы, забавная ошибка
-
Кирилл, спасибо. Снова выручили)
Это последствия ручного восстановления данных) -
Это на 18.10.3 или старее?
-
Старее, не помню сейчас номер версии - с начала лета.
-
Я сейчас готовлю changelog, там как раз есть пункт по этому поводу.
- 11 September 2018 (184 messages)
-
Какие кто использует способы для изменения формата даты при выгрузке, например, в тот же csv. Например, если надо вывести дату в файл в формате DD.MM.YYYY HH24:MI:SS
-
-
Здравствуйте, подскажите пожалуйста, выполняю команду
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4
выводит ошибку
Executing: /tmp/apt-key-gpghome.Xrk7HSuSwb/gpg.1.sh —keyserver keyserver.ubuntu.com —recv E0C56BD4
gpg: keyserver receive failed: Server indicated a failure
ошибка выводится в образе вагранта, на локальной машине все ставится нормально -
Joined.
-
Всем доброго утра. У меня возник вопрос. В bigquery у меня есть переменная в формате DATETIME. Мне нужно добавить к ней 7 дней, для построения неравенства. Но функции DATE_ADD(), DATE_SUB() не хотят работать.
-
-
Делаю примерно так: INS_DATE between REQDATE and DATE_SUB(DATE(REQDATE), INTERVAL 7 DAY)
-
INS_DATE between REQDATE and (REQDATE - INTERVAL 7 DAY)
-
-
Конечно, политически верный вариант (5NF и т.п.) - хранить один таймстамп (нормальный, в UTC) + таймзону/локацию пользователя в виде какого-нибудь timezone_id. Ну и чтобы база умела прозрачно для пользователя "переводить стрелки часов" если возникает такая потребность. Но мы тут про большие данные, где всякие там нормализации скорее мешают чем помогают, да и у Кликхауса нет "встроенной" возможности использовать одновременно много таймзон, если они хранятся вместе с данными. Поэтому проще и удобнее просто тупо 2 таймстампа, или таймстамп + смещение.
-
может редактор просто не знает?
-
спасибо. 👍
-
-
Ordinary (horizontal) merge proceeds like follows: take several sorted parts and create a read cursor for each of them, then create a resulting part by repeatedly appending to it the smallest row among those pointed by the current cursors.
By contrast, vertical merge proceeds as follows: first perform a horizontal merge on primary key columns, remembering for each row the part number from which it was taken (this is the rows_sources file). Then for each non-key column perform a "gather" step: gather the values of the resulting column from the source columns according to the rows_sources.
For wide tables vertical merge performs much better. -
-
Всем привет, какой способ загрузки данных в ClickHouse самый быстрый? Какой формат использовать при вставке? Может быть использовать какой-нибудь clickhouse-driver?
-
в общем проблема решилась так
sudo apt-key adv —keyserver hkp://keyserver.ubuntu.com:80 —recv-keys E0C56BD4 -
Всем доброго утра. У меня возник вопрос. В bigquery у меня есть переменная в формате DATETIME. Мне нужно добавить к ней 7 дней, для построения неравенства. Но функции DATE_ADD(), DATE_SUB() не хотят работать.
-
Делаю примерно так: INS_DATE between REQDATE and DATE_SUB(DATE(REQDATE), INTERVAL 7 DAY)
-
Все вполне быстрые. ИМХО оптимальный вариант - это TSV + clickhouse-client. clickhouse-client парсит, переводит формат в Native и сжимает данные перед передачей на сервер. Вряд ли вы сможете написать это быстрее.
-
-
А вы попробовали то что предложил @blinkovivan
-
?
-
Так что именно не работает с вычетанием?
-
-
Я же говорил, сам bigquery не воспринимает нормально...
-
Вы тут про bigquery спрашиваете или про кликхаус? :)
-
bigquery
-
Тогда стоит найти для этого вопроса более релевантный чатик
-
спасибо, буду тестировать)
-
Например так:
with
groupArray( tuple(timestamp, col1,col2) ) as per_user_rows,
arraySort( row -> row.1, per_user_rows) as per_user_rows_sorted_by_ts,
arrayEnumerate(per_user_rows_sorted_by_ts) as indexes,
arrayMap( (row, index) -> tuple( index, row.1, row.2, row.3 ), per_user_rows_sorted_by_ts, indexes) as per_user_rows_sorted_by_ts_with_indexes,
arrayJoin( per_user_rows_sorted_by_ts_with_indexes ) as final_row,
final_row.1 as row_index_final,
final_row.2 as timestamp_final,
final_row.3 as col1_final,
final_row.4 as col2_final
select userid, row_index_final, timestamp_final, col1_final, col2_final
from table_1123
group by userid
или так (простая "сквозная" нумерация)
select *, rowNumberInAllBlocks() from ( select * from table_1123 order by userid, timestamp); -
Все ещё актуально, если вдруг у кого пример есть. Не оч понятно, как хранить сам словарь в том же файле (csv например)
-
В документации есть https://clickhouse.yandex/docs/ru/single/#dicts-external_dictsДокументация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Есть именно примеры конфигурации. Мне не оч понятно, как хранить словарь в файле (csv например)
-
вот пример настройки:
https://clickhouse.yandex/docs/ru/single/#dicts-external_dicts_dict_sources-local_file
а если по структуре файла, то мне не понятно, что вам не понятно)
указываете например <format>CSVWithNames</> следовательно файл должен иметь вид типа:
Колонка1,Колонка2, ... ,КолонкаN
Данные1,Данные2, ... ,ДанныеN -
-
-
Понял, т.е. \n. Спасибо!
-
Добрый день!
Коллеги, при отправке запроса через jdbc периодически вылетает ошибка "Read timed out". Подскажите, какой настройкой регулируется этот таймаут? -
connection_timeout, socket_timeout
-
Спасибо
Есть http_connection_timeout со значением 1. Она устанавливается в минутах?
А настройки socket_timeout вообще нет в результате запроса к system.settings -
Так не годится:
select substring(toString(dt, 'UTC'), 9, 2)
|| '.' || substring(toString(dt, 'UTC'), 6, 2)
|| '.' || substring(toString(dt, 'UTC'), 1, 4)
|| substring(toString(dt, 'UTC'), 11, 9) as dt_str
from t
limit 10
;
? -
Ну, вполне. Думал, может есть какие-то более очевидные способы подобного форматирования🙂
-
-
ну можно использовать concat и toDayOfMonth, toMonth, toYear, toHour, toMinute, toSecond)
-
А можно пример исходных данных?
-
5B9589D3 к примеру (September 10, 2018 12:00:03 AM GMT+03:00)
-
В случае, например, с 8 часами утра в tohour мы получим 8 вместо желаемых 08. Возможный, но не самый удобный вариант
-
SELECT toDateTime(reinterpretAsUInt32(reverse(unhex('5B9589D3'))))
┌─toDateTime(reinterpretAsUInt32(reverse(unhex('5B9589D3'))))─┐
│ 2018-09-10 00:00:03 │
└─────────────────────────────────────────────────────────────┘ -
-
Спасибо! Вот это я пропустил :)
-
-
зависит от схемы изменения данных, например, если данные по юзерам изменяются инкрментно, то можно сделать ReplacingMergeTree и туда лить данные
-
-
-
SELECT
now(),
replaceRegexpAll(toString(now()), '([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})', '\\3.\\2.\\1 \\4:\\5\\:\\6') AS res
┌───────────────now()─┬─res─────────────────┐
│ 2018-09-11 10:21:27 │ 11.09.2018 10:21:27 │
└─────────────────────┴─────────────────────┘ -
еще можно toHour перевести в строку, потом скормить его в appendTrailingCharIfAbsent(x, '0'), а потом сделать reverse
-
Ок,а какими средствами лить? COPY TO?
-
будет 8 превращет в "08"!
-
я лью питоном батчами
-
Да, тоже вариант. Но вариант идти через replaceRegexpAll не отрабатывает у нас через консольный clickhouse-client - все равно выводится время в изначальном формате базы
-
SELECT *
FROM odbc() =) -
ubuntu@clickhouse-1:~$ clickhouse-client --query=" SELECT now(), replaceRegexpAll(toString(now()), '([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})', '\\\3\.\\\2\.\\\1 \\\4:\\\5:\\\6') AS res"
2018-09-11 10:27:03 11.09.2018 10:27:03
чуть больше экранирования и все заработает =) -
Подскажите пожалуйста, появляются ли какие-нибудь подводные камни при более частом использовании вертикального мерджа (при уменьшении значения vertical_merge_algorithm_min_rows_to_activate)? Директива помогла избавиться от падений от оом киллера при небольшом кол-ве памяти (32гб), хотелось бы знать чем это аукнется.
-
Ага, попробуем с дополнительной порцией экранирования. Благодарю
-
Есть новости, когда ближайший релиз?
-
да релизы буквально один за другим идут , к чему вопрос то ?
-
Кстати последний ченжлог - огонь
-
К тому, что когда релиз-то?
-
Вчера был
-
Joined.
-
Спасибо, пропустил. Ченжлог и вправду огонь!
-
-
Его в репе нет😢
-
в testing он
-
-
-
Ну это же пока -testing
-
-
ну разница к сожалению не велика
-
Ну для меня большая :) тестинг чаще, если я буду каждый раз делать бамп, это будет full time job для меня
-
ну давно пора автоматизировать
-
Фигово автоматизируется :)
-
подскажите пожалуйста, а зачем в примере в документации про MergeTree (https://clickhouse.yandex/docs/ru/operations/table_engines/mergetree/#_4) при создании таблицы с партиционированием по месяцам в индекс добавляется поле с датой? только чтобы отсоритровать по дням? партиционирование же будет эффективно работать при запросах с условиями по дате и без включения полей с датой в индекс?
-
-
При партиционировании по месяцу могут образовываться куски, в которых данные за целый месяц. Чтобы эффективно выбрать из такого куска данные за несколько дней (меньше месяца), в индекс добавляется дата.
-
так и подумал, спасибо
-
https://clickhouse.yandex/docs/ru/operations/table_engines/replication/#zookeeper (раздел "Восстановление в случае потери или повреждения метаданных на ZooKeeper кластере")
-
-
ну надо создать этот путь руками в зукипере
-
-
-
-
Так не будет работать
-
-
-
Когда дотестируем (сегодня-завтра, или обнаружатся проблемы и будет ещё один релиз)
-
спасибо, Алексей
-
да, кажется я разобрался. Спасибо. Я правильно понимаю, что inactive_20180901_20180911_0_413185_63240 в detached - значит, что я эти parts уже приаттачил?
-
-
Да, если кусок inactive - значит был ATTACH PARTITION, и этот кусок был покрыт другим куском, который тоже был в detached. В этом случае покрывающий кусок аттачится к таблице, а покрытый кусок переименовывается в inactive_, чтобы при повторных ATTACH не было дублирования данных.
-
Поставил КХ 18.12.13. Отвалились odbc: [unixODBC][Driver Manager]Can't open lib '' file not found
-
либа точно есть
-
откатываю на 18.5.1
-
Есть таблица формата:
ИД ДЕЙСТВИЕ
1 А
1 Б
1 А
2 А
... ...
Так вот, мне надо отобрать только те ИД, которые выполнили действие А, но ни разу не выполняли действие Б. Если можно на standart SQL. Заранее спасибо. -
-
Пробовал через GROUP BY, не знаю ка правильно оформить запрос.
-
Select id, sum(a), sum(b) from (Select id, if(action=A, 1, 0) as a, if(action=B, 1, 0) b) group by id having sum(a) > 0 and sum(b) < 1;
-
Типа такого
-
Не уверен, правда, что самый эффективный способ.
-
👍😂
-
select id
from (
select distinct id
from (
select 1 as id, 'А' as action
union all select 1 as id, 'Б' as action
union all select 1 as id, 'А' as action
union all select 1 as id, 'А' as action
union all select 2 as id, 'А' as action
) as t
where action = 'А'
) any left join (
select distinct id, id as is_find
from (
select 1 as id, 'А' as action
union all select 1 as id, 'Б' as action
union all select 1 as id, 'А' as action
union all select 1 as id, 'А' as action
union all select 2 as id, 'А' as action
) as t
where action = 'Б'
) using (id)
where is_find = 0
;
— предложу такой вариант -
данные настройки нужно вписывать в config.xml?
-
нет, в отдельный конфиг словаря
-
-
yandex/ClickHouse was tagged: v18.12.13-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v18.12.13-stable
Release notes:
v18.12.13-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
При включении опции
enable_optimize_predicate_expression
при подключении через clickhouse-client
пишет такое -
Запросы вроде работают
-
Нашел недокументированный cross join - то, что нужно.
-
Хороший вариант, работает.
Можно еще через снапшот, но очень аккуратно, чтобы КХ ничего не успел дописать после создания снапшота -
Привет! У меня вопрос по формату выходных данных. В документации сказано, что в формате TabSeparated значения NULL передаются как \N. Но я заметил, что если возвращаются Tuple'ы, в которых есть Nullable значения, то в них все равно пишется NULL, за место \N. Так и должно быть?
Например после выполнения запросов:
> CREATE TABLE t (a Nullable(UInt8), b Tuple(Nullable(UInt8), UInt8)) ENGINE = Memory
> INSERT INTO t VALUES (NULL, (NULL, 1))
> SELECT * FROM tВернется строка \\N\t(NULL,1)\n -
Спасибо, буду пробовать
-
А, разобрался, нашел в открытых issues.
-
Joined.
-
Вы можете сделать select ... format TSV
-
И там увидите как эта штука пишется
-
Да, именно так и делал, в примере забыл указать
-
подскажите, пожалйуста, в каком файле нужно прописать max_bytes_before_external_sort, max_memory_usage, max_bytes_before_external_group_by ? я так понимаю задать нужно для пользователя? просто в наших конфигах есть только параметр max_memory_usage, хотя ClickHouse этого года
-
-
-
-
Вопрос к уважаемой команде разработки. Сам новый релиз не пробовал, но имею вопрос. Использование group by wirh rollup реализовано хардкорно, или перформанс будет схож с Array join массивов с комбинациями колонок?
-
Имеет ли смысл под значения с id использовать int если стринги все равно хешируются, и уникальных значений этих Id планируется пару десятков. В общем,у меня вопрос цены удобства 1345 или "Вася"?
-
Спасибо. Разобрались, у клика не было прав читать созданные препрцессед файлы
-
Звучит как сценарий для LowCardinality(String)
-
-
rollup реализован так: столбцы по-очереди заполняются дефолтными значениями и блок доагрегируется по оставшимся колонкам.
-
Будет работать лучше, чем arrayJoin - и быстрее и меньше памяти расходуется.
-
Наши аналитики тоже сейчас делают через arrayJoin, но это получается неудобно - надо писать несколько arrayJoin-ов и куча времени тратится на размножение строк. GROUP BY WITH ROLLUP позволяет этого избежать.
-
У нас запросы пишут роботы для роботов) Но ввиду сказанного, будем резко переделывать на rollup
-
Подскажите, пожалуйста - в доке написано, что SELECT ... FROM table FINAL работает только для CollapsingMergeTree. Это правда? Проверить в данный момент нет возможности, а информация нужна. У меня есть ощущение, что всё работало и для ReplacingMergeTree, но я не уверен.
-
SELECT arrayJoin([RegionID, 0]) AS k1, arrayJoin([SearchEngineID, 0]) AS k2, count() FROM test.hits GROUP BY k1, k2 ORDER BY count() DESC LIMIT 10
242 мс.
SELECT RegionID AS k1, SearchEngineID AS k2, count() FROM test.hits GROUP BY k1, k2 WITH ROLLUP ORDER BY count() DESC LIMIT 10
43 мс.
Правда первое - это всё-таки аналог WITH CUBE, которого ещё нет. -
Неправда. Работает для всех таблиц, для которых слияние делает какие-то вычисления.
-
Значит, косяк в документации
-
спасибо
-
Да, я скорее cube имел в виду
-
Создал issue
https://github.com/yandex/ClickHouse/issues/3105Unknown identifier: concat(func.name, comb.name) #3105I updated to 18.12.13 and set option enable_optimize_predicate_expression in config. After reload I get this message Cannot load data for command line suggestions: Code: 47, e.displayText() = DB::Exception: Received from localhost:9000, ...
-
-
А что именно поломалось?
По крайней мере, возможность задумана именно как возможность. -
такой вот запрос
`SELECT
*
FROM
(
SELECT
MainID,
COUNT() AS cnt
FROM table1
GROUP BY MainID
)
ANY LEFT JOIN
(
SELECT
MainID,
AddField1,
AddField2
FROM table2
) USING (MainID)`
выдает таблицу со структурой
MainID, cnt, MainID, AddField1, AddField2
раньше (на 18.04) было
MainID, cnt, AddField1, AddField2 -
Ставьте asterisk_left_columns_only = 1.
-
-
Настройка уровня пользователя.
Сначала проверьте запрос в клиенте командной строки с помощью SET. -
В старой версии такой запрос должен был выдавать
MainID, cnt -
-
@milovidov_an у нас была беда с сервером и в папке distributed таблицы лежат папочки типа default@10%2E20%2E116%2E11:9000,default@10%2E20%2E117%2E9:9000 - как их дописать в таблицу?
-
-
Без этой настройки всё работает так же, как раньше (как в предыдущей версии 18.10.3 и раньше). Да, перечислять явно.
-
-
В этих директориях находятся файлы с данными для отправки на удалённые серверы. Файлы .bin. Distributed таблица берёт файлы из этой очереди и пытается отправить. Если их не получается отправить, об этом будут сообщения в логе сервера. Надо посмотреть, в чём там проблема.
Типичные проблемы:
- изменился IP адрес сервера - надо исправить его в имени директории и перезапустить clickhouse-server;
- файл побился на файловой системе - можно отложить его в сторону, чтобы остальные файлы отправились. -
Нам пришлось пересоздавать таблицы и эти файлы я поместил руками туда. У нас сломался зукипер и нам пришлос аттачить куски вручную в таблицы
-
И distributed тоже на всякий случай пересоздали, предварительно "сбекапив" эти временные куски
-
В этих временных кусках находятся данные, которые всё ещё должны быть отправлены. Посмотрите, почему не отправляются. Насколько я помню, список файлов обновляется без перезагрузки. Сервер об этом напишет. Могут быть ещё проблемы с правами.
-
Проверил права - все принадлежит clickhouse пользователю.
Алгоритм был такой:
Скопировали /var/lib/clickhouse/data/DB/TABLE/* в отдельную папку
Удалили папку с таблицей, удалили все мета-данные, при этом зукипер был абсолютно пустой
Создали таблицу
Положили файлики туда где они и были, т.е. в /var/lib/clickhouse/data/DB/TABLE/*
В логах сейчас пусто, т.е. КХ будто бы не видит эти папки вообще. -
Просто подложить файлы с кусками данных в директорию таблицы - не работает. Надо положить их в директорию detached, затем выполнить запросы ALTER TABLE ... ATTACH PARTITION для каждой партиции.
-
Да, мы так и сделали, но есть директории типа default@IP:PORT...
-
аттач мы делали для merge tree таблицы, там все ок и все взлетело, а вот distributed - беда
-
Проблема в том, что Distributed таблица не видит данные, которые вы для неё подложили? Возможно, что она всё-таки не обновляет список файлов без перезагрузки. Чтобы не перзагружать сервер, можно сделать DETACH TABLE и ATTACH TABLE для этой таблицы.
Также стоит проверить, что имена директорий соответствуют конфигурации кластера. -
Проблема в том, что Distributed таблица не видит данные, которые вы для неё подложили? - да. Файлы, которые должны разлететься по шардам.
Detach и attach таблицы не помог ( В логах пусто ( -
Сделайте вставку в эту Distributed таблицу, посмотрите где создастся файл, как он отправится. Возможно, что что-то перепутано в путях.
-
Все, прошло! Видимо он "подвис" ) Данные проглотились после детача и атача! Спасибо!
-
Просто он почему-то не сразу их вписал
-
Там есть exponential backoff при ошибках - время повтора увеличивается до 30 сек.
-
Ну вобщем оно прошло, но после детача и не моментално, а спустя какое-то время
-
-
-
Количество данных, вставляемых за один раз - это не проблема. В целом по throughput формат менее эффективен чем CSV, TSV - за счёт парсинга имён полей.
При достаточно большом размере пачки throughput (количество строк в секунду) не зависит от объёма данных, отправляемых за один раз. -
-
Приблизительно пропорционально объёму данных в текстовом виде. Например, файл в JSONEachRow весит в два раза больше, чем CSV - будет примерно в два раза медленнее. Но возможны вариации в зависимости от конкретных типов данных. Обычно разница менее чем пропорциональная.
-
-
Размер пачки - Ок.
Вставка в JSONEachRow менее эффективна, чем в CSV или TSV. Впрочем, если у вас уже есть данные в JSONEachRow, то вставка их сразу в этом формате, будет более эффективной, чем предварительная конвертация. -
Также иногда форматирование в JSONEachRow на стороне своих программ оказывается более эффективным, чем в CSV или TSV.
-
-
- 12 September 2018 (221 messages)
-
-
если деньги есть то вам к альтинити
-
если нет то проще тут поспрашивать
-
-
-
-
-
-
Доброе утро! Подскажите, пожалуйста, что за ошибка? Как пофиксить?
default.{table} (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 235, e.displayText() = DB::Exception: Part 20180409_2_4_1 (state Committed) already exists, e.what() = DB::Exception -
Всем привет!
Наблюдается проблема с обновлением внешних словарей (из постгреса), проверял в версиях 18.12.5 - 18.12.13
Словари создаются/обновляются при старте кликхауса (это можно увидеть в колонке creation_time в таблице `system.dictionaries`). При следующих попытках обновления (через 5 минут, согласно настройкам) падает исключение (колонка last_exception той же таблицы):
Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Host not found, e.what() = Host not found
В логах:```
2018.09.12 05:28:11.448817 [ 52 ] <Error> ExternalDictionaries: Cannot update external dictionary 'bundle_ids', leaving old version: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Host not found, e.what() = Host not found
`
Доступ к БД постгреса есть - проверял из консоли клиентами psql и isql (последний с явным указанием настроек ODBC как для кликхауса).
Выполнение запроса SYSTEM RELOAD DICTIONARIES; нормально обновляет словари (!), но спустя 5 минут проблема возвращается...
Что я делаю не так? -
Всем привет.
Есть ли возможность из jdbc следить за статусом (процентом исполнения) запроса? Есть идеи? -
-
-
-
-
Реплика позволяет больше запросов обработать
-
Ускоряет запросы шардинг
-
У вас запрос быстрее работать не станет. Их просто больше в единице времени можно будет обработать
-
-
Это делается в случае шардинга
-
-
-
-
Ну смотрите. У вас запрос выполняется 5 секунд. Вы за минуту можете обработать допустим 12 таких запросов. В какой-то момент вам требуется обрабатывать 24 запроса в минуту. Вы поднимаете вторую реплику и запросы у вас так и будут выполняться по 5 секунд, просто каждая из реплик может обработать по 12 запросов.
-
Вот полная копия данных - это реплика. У нас 8 машин. 4 шарда по 2 реплики.
-
-
-
А если вас не устраивает время запроса в 5 секунд и вы хотите его уменьшить, скажем до 2.5, то вы шард добавляете и у вас запрос работает 2.5 секунды вместо 5.
-
да, это я понял
-
Можно и одним обойтись. У альтинити вроде была статья на тему кросс-репликации
-
ссылочку не найдете?
-
Сейчас постараюсь
-
-
-
ClickHouse/ClickHouse
ClickHouse is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Зависит от таблицы и самого запроса. У нас все вполне себе параллелится
-
Зависит от движка таблицы, который вы используете, а так же от числа партиций в таблице (если это MergeTree)
-
mreci
-
одна партиция
-
Это даже лучше :) статью пока не удается найти
-
👍👍👍
-
Если в ней будет несколько кусков, то будет параллелить
-
Агрегация вроде бы тоже параллелится
-
-
-
мозг )
-
+ )
-
Он достаточно быстро работает )
-
Тулзы нет, но есть логи в которых кажет конвейер выполнения запроса
-
по умолчанию включены?
-
А вообще если глянуть видяшки про устройство mergetree, то там все понятно будет
-
Да вроде, log level должен быть trace если не ошибаюсь
-
Есть подзапрос, который необходимо использовать в нескольких запросах, но с разными параметрами. Подскажите, пожалуйста, есть ли в clikhouse возможность создать view с параметрами или может обернуть запрос в функцию таким образом, чтобы не писать в каждом запросе один и тот же подзапрос?
-
-
cte пока не работает (
-
Точнее его пока нет
-
А в with вроде бы работает, но я не тестил
-
в данной задаче, кмк, CTE не подойдёт
-
-
create table ... (...) engine = MergeTree partition by ... order by ...
-
Там нужно перечислить все поля соединяемых таблиц?
-
Сорян
-
Я прочитал merge tree
-
create table table_name as одна_из_таблиц_для_Merge ENGINE = Merge(database, 'pattern'); -
Спасибо
-
Joined.
-
вопрос открыт
-
Имеет ли смысл под значения с id использовать int если стринги все равно хешируются, и уникальных значений этих Id планируется пару десятков. В общем,у меня вопрос цены удобства 1345 или "Вася"?
-
yandex/clickhouse-presentations
Presentations, meetups and talks for ClickHouse. Contribute to yandex/clickhouse-presentations development by creating an account on GitHub.
-
👍
-
-
Если вам явно это поле не нужно в ORDER BY - тога не нужно.
-
И ещё баг
https://github.com/yandex/ClickHouse/issues/3111Error with VIEW and enable_optimize_predicate_expression #3111If option enable_optimize_predicate_expression = 1 and tables like this DROP TABLE IF EXISTS test1 DROP TABLE IF EXISTS test2 CREATE TABLE test1 (_id String) ENGINE=Memory CREATE TABLE test2 (_id String, userId String) ENGINE=Memory CREA...
-
По нему будет поиск. Т.е. нужно ли добавлять, если данные вроде как итак на куски побиты на диске будут
-
@konstantin_ptr по low cardinality string, подскажите, это уже вошло в какой либо релиз(и в какой возможно войдет)? https://github.com/yandex/ClickHouse/blob/master/CHANGELOG.md
Здесь последний 18.6.0 и про эту фичу ни слова пока.ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Если у вас партиции по одному полю, а в первичном ключе (ORDER BY) другие поля. И в запросе есть условие на партиции и первичный ключ, тогда КХ сначала выберет нужные партиции, а дальше будет искать с использованием первичног ключа уже конкретных партиций
-
-
его не успели перевести на английский, см. https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md
18.12.13 зарелижен 19 часов назад -
Спасибо, получается, что тогда в order by добавлять не нужно. Попробуем ещё залить тестовые данные и погонять.
-
Отличная новость! Спасибо!
-
странно, только вчера развернул кликхаус)
-
Почитайте тут
https://clickhouse.yandex/docs/ru/operations/table_engines/mergetree/
"Выбор первичного ключа"
Возможно я для ваших данных и запросов что-то не учёл -
Joined.
-
Подскажите пожалуйста, есть 3 шарда(по 2 реплики каждый), на каждый смотрит распределенная таблица со своим ключом. При попытке вставить данные на первом шарде в распределенную таблицу данные улетают на второй, соответственно данные на первом и третьем шарде не появляются. Возможна ли запись на три шарда одновременно через распределенные таблицы?
Запрос
cat /tmp/customer.csv | clickhouse-client --host=ch-shard01 --database=dfoodmart --query="INSERT INTO customer FORMAT CSV"; -
-
-
не, у меня вопрос глупее.. что написать вместо toYYYYMM(event_date) ?
-
Вам нужно чтобы даты округлялись до начала недели?
Так 2018-09-12 -> 2018-09-10 ? -
-
-
чёрт, спасибо :)
-
-
крайний вопрос... планирую создать в таблице поле Nested (хранить ключ-значение). Вопрос в том, насколько хорошо будут сжиматься данные? они будут сжиматься по каждой строчке в Nested, либо по полю целиком? В ORDER BY насколько я понимаю можно добавить ведь только название Nested столбца?
-
Подскажите, а в чем опасность бОльшего кол-ва партиций? Для повседневного бекапа очень удобно партиции по дням делать, что породит 365 партиций в год - могут быть какие-то проблемы?
-
-
-
-
-
-
Задается в конфиге, 200 гб по умолчанию. max_bytes_to_merge_at_max_space_in_pool, можно задать/ поменять для каждой таблицы, но через редактирование {table_name}.sql (с detach/attach). Он не перестает мержить. Просто вы еще не подождали 1000 лет. Т.е. последние мержи трудоемки и зачастую бессмысленны, поэтому кх их отодвигает на попозже.
-
👍 спасибо!
-
-
В таблицах replication_queue смотрите
-
-
А если в таблице replication_queue пусто?
-
значит все ОК, можно в system.parts посмотреть, там имена партов и размеры видны, можно сравнить по репликам.
-
один кусок лучше, но партиции это очень мощный инструмент для фильтрации, поэтому лучше ухудшить 99% запросов на 0.0001% , но 1% запросов улучшить на 400%
-
ок, но через 1000 лет мы действительно дождёмся слияния всех партиций за один и тот же год?
-
там есть близкие по размеру, и хотелось бы получить из них одну большую партицию
-
OPTIMIZE
-
Всегда можно не ждать и сделать OPTIMIZE руками
-
Опередил :)
-
Спасибо, попробуем!
-
если там пусто, но select partition, sum(rows) from system.parts where table = 'dsp_raw' group by partition дает разное кол-во строк. Надо чинить репликацию для этой таблицы?
-
в 99.999% случаев из двух партиций по 100 вы получите одну по 200, и 0% прироста производительности, при этом 3 часа будет идти межр и три часа тормозить параллельные селекты.
-
-
При запросе к system.parts добавляйте условие на AND active
-
ничего не изменилось
-
Когда я ищу по ключевому полю и CH берёт разреженный индекс, минимальное значение для ключевого поля он знает сразу, по первой записи в файле разреженного индекса, и если искомое значение меньше его то может сразу пропустить этот куско, а знает ли он максимальные значение ключевых полей из индекса, или начинает читать его целиком? и как выполняет поиск, последовательно или бинарным поиском?
-
не задумывался, индексы маленькие, лежат в ОЗУ (в специальном кеше).
-
Joined.
-
-
create table test_cardinality (x String) engine = MergeTree order by tuple();
insert into test_cardinality (x) select concat('v', toString(number)) from numbers(10);
alter table test_cardinality add column y LowCardinality(String);
select * from test_cardinality;
выдает ошибку
Received exception from server (version 18.12.13):
Code: 49. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Got empty stream in DataTypeWithDictionary::deserializeBinaryBulkStatePrefix: (while reading column y): (while reading from part /var/lib/clickhouse/data/vlk_test/test_cardinality/all_1_1_0/ from mark 0 with max_rows_to_read = 8192). -
а dmesg и syslog что?
у вас точно старый КХ остановился? проверьте ps -
В общем, я прибил партиции в таблице сырых данных), так как у меня были нужны агрегированные данные. По итогу, в логе кликлахуса (не err) записи были, что "что-то идет" - но по факту кол-во строк не изменялось,. В общем, повторюсь, решил кардинально. Сейчас вроде все ок
-
Joined.
-
Добрый день !
Скажите пожалуйста, если выполнить SHOW TABLES FROM database
Вьюхи тоже отобразятся ? или нужно выполнить SHOW VIEWS FROM database ? -
я верно понимаю что такого понятия как SHOW VIEWS в ClickHouse нет ?
-
select * from system.tables where engine = 'MaterializedView'
-
Окей спасибо !!!
-
Мне кажется это не совсем то
-
Вот у меня есть база
-
в которой есть обычные merge tree таблицы
-
и есть несколько вьюх
-
когда я выполняю запрос show tables from database
-
я увижу только таблицы ? или таблицы + вьюхи ?
-
-
Спасибо большое =)
-
-
-
-
-
-
Если есть ключ семплирования то можно и по репликам запрос побить
-
-
Меня просто попросили, составить список таблиц в базах. Я составил список, показал. А мне сказали чтобы я пересчитал еще раз. Сказали что нет некоторых вьюх.
И тогда я подумал, что когда я составлял список таблиц выполнением команды "show tables from database" я получал только список таблиц, а вьюхи не получал. -
Сейчас проверил, действительно, команда show tables from database отображает в том числе вьюхи
-
вот у меня есть две таблицы ReportsToday - она перезаливается раз в 10 минут, в ней сегодняшние данные, и есть ReportsDaily, в нее данные заливаются ночью за прошлые сутки. Чтобы не мутить юнион, я сделал таблу Reports с движком Merge, и просто селектирую из нее.
-
а не сравнивали разницу в скорости работы?
-
-
-
-
-
-
Скажите пожалуйста, а вьюхи имеют свойство реплицироватся ?
-
то есть скажем если я создал одну вьюху, а потом отредактировал ее, то поменяется ли она на всех нодах ?
-
Создаёт представление. Представления бывают двух видов - обычные и материализованные (MATERIALIZED).
При создании материализованного представления, нужно обязательно указать ENGINE - движок таблицы для хранения данных.
Материализованное представление работает следующим образом: при вставлении данных в таблицу, указанную в SELECT, часть вставленных данных конвертируется запросом, а результат вставляется в представление.
Обычные представления не хранят никаких данных, а всего лишь производят чтение из другой таблицы. То есть, обычное представление - не более чем сохранённый запрос. При чтении из представления, этот сохранённый запрос, используется в качестве подзапроса в секции FROM. -
То есть чтобы создать реплицируюую вьюху нужно создать матеарилизованую вьюху ?
-
-
Вот я создал вьюху на всех четырех нодах.
Потом сделал Альтер вьюхи на одной ноде.
Можно ли сделать вьюху реплицируемой чтобы вручную на всех нодах не редактировать ? -
-
-
-
У нас создано много вьюх, но обычных, без указания engine. Их можно перевезти в реплицируемые Merge Tree ? или нужно будет пересоздать ?
-
Пересоздавать руками
-
@Shegloff @Krashuevina Спасибо большое за оперативные ответы !
-
У меня случилось что-то похожее.
Было создано несколько новых таблиц on cluster, на ноде с версией 18.1.0. Нода с версией 18.12.13 создала таблицу, но не смогла данные скачать, писала Can not clone replica, because the 'Хост-инициатор' updated to new ClickHouse version (что неправда, там как раз старее версия стояла).
Причем некоторые таблицы успешно создались. А некоторые из тех, которые ругались, были пустые.
Мне помог апгрейд ноды, на которой создание таблиц запущено было. После ее рестарта все само починилось -
Мне в итоге помогло удаление из зукипера узлов со старыми нерабочими репликами. Типа /clickhouse/tables/1-1/balance/replica_name/replicas/10.10.10.10 - где последний IP - этой реплики уже не было
-
Реплицируются данные, а не определение вьюх/таблиц/чего угодно.
DDL или вручную на всех нодах запускать надо, или ON CLUSTER -
А, то есть если таблица поменяет структуру
-
Придется вручную менять
-
На всех нодах
-
Так ?
-
Например я добавил ещё один столбец
-
-
-
-
Да, это странный момент, потому что в итоге ALTER TABLE … ON CLUSTER не работает, как ожидается
-
Или это уже починили?
-
Спасибо всем за ответы
-
он работает как ожидается, просто разработчики ожидали то как работает, а вы ожидаете что-то свое. Причем там много факторов включая настройку internal_replication.
-
но вообще из-за асинхронности On Cluster работает асинхронно, поэтому на проде использовать -- как повезет
-
Плюсую. Только под пристальным присмотром и вручную выполнять :)
-
Вроде если все ноды живы, то все-таки запрос проходит синхронно. Пока что ни разу не сталкивался с обратным 🙂
-
привет. никто не в курсе, что с этим делать?
2018.09.12 15:28:20.475279 [ 45 ] DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 49, e.displayText() = DB::Exception: Part 20180907_20180912_53493_100624_10153 intersects next part 20180912_20180912_100614_100629_3 (state Committed). It is a bug., e.what() = DB::Exception, Stack trace: -
версия 18.5.1, может, в новых пофикшено?
-
и насколько это критично для дальнейшего функционирования
-
-
последний час идет
и на этой машине график replicated_part_failed_fetches_total в районе 20-25 держится -
прочитал чейнджлоги, нихрена из них не понял актуальный статус типа данных UUID
им уже можно пользоваться, или лучше таки не рисковать и пользовать что то из
FixedString(16) или два поля ( UInt64 + UInt64 )?
Что вообще лучше? (планируется использование для group by и в качестве аргумента для uniq[Exact]) -
пытался читать код, ничего не понял. есть шанс, что они пропадут со временем сами или нужно что-то делать?
-
всмысле много и повторяются такие ошибки? тогда возможно что оно скачивает куски и сразу их удаляет в цикле
-
да, в логах также есть сообщения про удаление, поэтому и вопрос - стоит ждать, что оно сойдется к какой-то неподвижной точке?
-
-
-
-
Делаем на лидере -
:) ALTER TABLE db.tbl DETACH PARTITION '2018-05-21';
:) ALTER TABLE db.tbl ATTACH PARTITION '2018-05-21';
Больше лишних скачиваний нет.
Убеждаемся что в лишнем парте нет нужных данных
:) ALTER TABLE db.tbl ATTACH PART '20180521_1_62_5';
:) OPTIMIZE TABLE db.tbl PARTITION '2018-05-21' DEDUPLICATE; -
ого, супер
-
а зачем проверять место на диске?
-
имею в виду, какой смысл в этом числе? должно быть 0?
-
а, и как узнать лидера?)
-
если там очень много - то процесс может занять очень долго, должно быть больше 0
-
SELECT * FROM system.replicas
для нужной таблицы is_leader=1 -
а в каком куске я заинтересован? есть несколько кусков, которые intersects previous & intersects next, где left <= PART <= right, left/right - разные, а PART - всегда один и тот же кусок - я правильно понимаю, что это он проблемный?
-
-
о, класс
еще раз спасибо) -
который после ATTACH PARTITION останется на диске в detached/
-
19 гигабайт, ничего себе
-
сделал attach/detach, прошло практически мгновенно
-
в detached осталось несколько десятков директорий/кусков с префиксом inactive, стоит пытаться их приаттачивать?
-
-
cегодняшние, в районе 10 утра.
но выхлоп такой:
Code: 226, e.displayText() = DB::Exception: No columns in part 20180912_20180912_101361_101361_0, e.what() = DB::Exception
ошибки из логов пропали, все устаканилось -
(выхлоп попытки приаттачить)
-
Привет, может кто-то сталкивался с ошибкой при создании реплицируимой таблицы ZooKeeperImpl::Exaption: Marshalling error, path: /clickhouse/tables/01/clusterA/table_name/log ?
Подозреваю что проблема с zookeepr но как пофиксить не знаю. Может можно как-то кластер пересоздать ? Пробовал удалять в zookeeper path, zkCli.sh валится с ошибкой. -
-
клиент это на самом деле тот же бинарь что и сервер, поэтому либо собирать, либо докер.
-
Привет, а можешь побольше логов приложить? Желательно с trace-уровнем.
Ну и заодно конфиг словаря, /etc/odbc.ini и /etc/odbcinst.ini. -
-
Если один кусок - тоже всё распараллеливается.
-
Это экспериментальная функциональность. Доступна для тестирования.
-
Joined.
- 13 September 2018 (208 messages)
-
Это говорит о том, что в директории /clickhouse/tables/01/clusterA/table_name/log очень много нод. Нужно вручную удалить наиболее старые записи.
-
С inactive директориями ничего делать не нужно. Разве что их можно удалить.
-
Тип данных UUID начинает полноценно поддерживаться в ClickHouse. Вы можете использовать его по прямому назначению. Любые оставшиеся недоработки будем исправлять в первую очередь.
-
UNION ALL тоже распараллеливается.
-
-
конфиг словаря:
<dictionaries>
<dictionary>
<name>bundle_ids</name>
<source>
<odbc>
<connection_string>DSN=postgres_dashboard</connection_string>
<table>bundle_ids</table>
</odbc>
</source>
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
<layout>
<hashed/>
</layout>
<structure>
<id>
<name>id</name>
</id>
<attribute>
<name>content</name>
<type>String</type>
<null_value></null_value>
</attribute>
</structure>
</dictionary>
</dictionaries>
содержимое /etc/odbc.ini:
[DEFAULT]
Driver = postgres_dashboard
[postgres_dashboard]
Description = PostgreSQL connection to dashboard
Driver = PostgreSQL Unicode
Database = dashboard
Servername = ip-address
UserName = user
Password = superStrongPass
Port = 5432
Protocol = 9.6
ReadOnly = Yes
RowVersioning = No
ShowSystemTables = No
ConnSettings =
[postgres_booking_tool]
Description = PostgreSQL connection to booking tool
Driver = PostgreSQL Unicode
Database = booking_tool
Servername = ip-address
UserName = user
Password = superStrongPass
Port = 5432
Protocol = 9.6
ReadOnly = Yes
RowVersioning = No
ShowSystemTables = No
ConnSettings =
содержимое /etc/odbcinst.ini:
[PostgreSQL ANSI]
Description=PostgreSQL ODBC driver (ANSI version)
Driver=psqlodbca.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1
[PostgreSQL Unicode]
Description=PostgreSQL ODBC driver (Unicode version)
Driver=psqlodbcw.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1
locate psqlodbca.so
/usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so
Как видите, в моем случае invalidate_query не используется... -
По логам. Когда в логе ошибок есть
2018.09.13 05:54:32.796610 [ 150 ] <Error> ExternalDictionaries: Cannot update external dictionary 'bundle_ids', leaving old version: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Host not found, e.what() = Host not found
В логе с уровнем трейс вижу следующее:
2018.09.13 05:54:32.795648 [ 150 ] <Trace> ODBCDictionarySource: SELECT id, content FROM bundle_ids;
2018.09.13 05:54:32.795671 [ 150 ] <Trace> ReadWriteBufferFromHTTP: Sending request to http://localhost:9018/ping
2018.09.13 05:54:32.796610 [ 150 ] <Error> ExternalDictionaries: Cannot update external dictionary 'bundle_ids', leaving old version: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Host not found, e.what() = Host not found
остальные записи в логе, насколько я могу судить, к обновлению не относятся... -
Joined.
-
-
А localhost резолвится вообще? Если попробовать ping localhost?
-
Да, с этим проблем нет:
ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.010 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.031 ms -
curl http://localhost:9018/ping
Ok. -
Joined.
-
-
Посмотрел код ещё раз. Действительно будет стрелять для odbc hashed-словарей и без invalidate_query. Фикс уже есть, скоро соберём релиз.
-
Спасибо, ждем!
-
Подозреваю что вопрос уже был и не раз, но всё же: первичный ключ в *MergeTree таблицах. Использую CollapsingMergeTree, соответственно должен добавить в ключ колонку с id-шником, а у него высокая кардинальность (практически уникальный). Стоит ли вместо (xx,xxx,xxxx,id) сделать (xx,xxx,xxxx,hash(id),id), где hash(id) понизит кардинальность такого поля на несколько порядков ( (xx,xxx,xxxx) обладает малой кардинальностью)? Конечно hash(id) больше index_granularity во многих случаях, в каких случаях это даст выигрыш в производительности? hash(id) не очень дорогая функция.
-
Joined.
-
-
select arrayFilter(x -> x !=0, [1,2,3,0,2,0])[-1];
-
Спасибо огромное!
-
Подскажи, что значит эта часть? [1,2,3,0,2,0]
-
Это сам массив
-
Аааа, всё спс.
-
-
всем привет. это нормально, что текущая партиция в system.parts содержит на 2 порядка больше кусков, чем предыдущая? 1000 против 30-40
на ровном месте повалили мержи, пытаюсь разобраться, почему -
Подскажите, как в кликхаус сделать следующий запрос из постгреса https://dumpz.org/cYffQYBgRsBc То есть в нем, я для каждого dimension1 получаю цену с самой последней датой.source code in SQL
source code in SQL from Anonymous.
-
ORDER BY datetimeadded DESC LIMIT 1 BY dimension1
-
SELECT *
FROM system.metrics
WHERE metric = 'MemoryTracking'
┌─metric─────────┬────────value─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ MemoryTracking │ -69765993365 │ Total amount of memory (bytes) allocated in currently executing queries. Note that some memory allocations may not be accounted. │
└────────────────┴──────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
скажите, а это фича или баг?
Версия КХ - 18.12.13 -
Добрый день
Скажите а как объяснить что кол во селектов больше чем общее кол во запросов, -
tsf-data24.us.com :) select * from system.events;
SELECT *
FROM system.events
┌─event───────────────────────────────────┬───────────value─┐
│ Query │ 68848667 │
│ SelectQuery │ 101904153 │
│ InsertQuery │ 513217 │
│ FileOpen │ 2778419186 │ -
Спасибо
-
Не пойму в чем прикол. Есть таблица в которой есть столбец с типом "Date".
Вставляю в него текущее UnixTime время, потом смотрю селектом что вставилось. А там 2020-08-06 -
Взял время из интернета, тогда показал вообще 2020-03-16
-
-
-
Бля
-
точно
-
ссорян
-
за мат
-
спасибо =)
-
этож не datetime
-
-
Спасибо !
-
-
Коллеги, а не подкажете в какую сторону копать на тему "2018.09.13 14:40:54.368711 [ 8 ] <Error> dnl_int.dnl_log_local (StorageReplicatedMergeTree): DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 10, e.displayText() = DB::Exception: Not found column size in block. There are only columns: , e.what() = DB::Exception" - колонка такая в самой таблице конечн же есть. Ругается на много подобных таблиц и только на поле size. С какой стороны начинать поиск?
-
Привет всем.
Я тут попробовал подключить монгу в качестве словаря и столкнулся с невозможностью прокинуть поля из вложенных структур. Т.е. все верхнеуровневые поля видны нормально, а глубже уже нет. В конфиге имя атрибута указываю как Structure.FieldName, но возвращается пустое значение. Никто не сталкивался с подобным поведением? -
Всем привет. Подскажите пожалуйста формат отправки метрик с тегами в carbon-clickhouse чем то отличается от нативного в graphite? Пробую вот так echo "my.awesome.metric1;tag1=sd;tag2=xz 11 $(date +%s)" | nc -w0 carbon-clickhouse 2003 и ничего не падает в кх.
-
не уверен что вопрос про кх, пойду продублирую в метрики его
-
-
Пытается
-
А в файл выгрузить и загрузить не поможет? Все равно сначала в памяти создаст?
-
А вам правда нужен именно CROSS джойн?
-
Обычно в КХ хранят таблицы размерами в несколько миллионов строк (или миллиардов / триллионов). При CROSS джойн "на выходе" количество строк равно количеству строк в первой таблице, умноженному на количество строк в другой таблице. Если миллионы умножать на миллионы то сложно ожидать что в памяти поместится.
-
-
ок, а нет ли какого-то условия для сужения слияния? Вам точно нужно именно каждый с каждым?
-
-
Методом тыка удалось создать реплицируемую таблицу
-
CREATE TABLE lexa_test
(
id Int64,
i_env Int64,
i_customer Int64,
i_account Int64,
creation_date Date
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/lexa_test', '{replica}', creation_date, creation_date, 8192) -
но что это за параметры такие
-
creation_date, creation_date
-
если их не указывать
-
не создается реплицируемая таблица
-
ключ партицирования и праймери кей
-
это обязательные параметры получается ?
-
ну а как движок будет без них то
-
единственный вариант выполнить 10000 insert для каждой строки по 1.
-
Ладно я знаю что такое первичный ключ
-
а что такое ключ партицирования ? простыми словами
-
для чего он нужен ?
-
не пойму
-
Я просто хочу перевезти все текущие таблицы в реплицируемые. И сделать это максимально безболезнено. То есть по пути наименьшего сопротивления. Хочу обойтись минимальным количеством дополнительных параметров при создании реплицируемой таблицы.
-
скриптом? или есть какое-то заклинание?
-
чтобы виртуально разделить таблицу на несколько ( для ускорения select и для простоты управления таблицей ).
у вас два клиента -- партиционируем по клиенту ( select where client = 1 затрагивает пол таблицы, клиент ушел, дропаем все его данные одной командой ) .
Или партиционируем по-месячно, и запросы затрагивающие один, два... месяца ускоряются, и данные страше 4 месяцев легко удалить.
Первичный ключ для уменьшия занимаего места на диске, из-за сортировки, и опять-же для некоторого ускорения select. -
скриптом
-
Спасибо) правда я ничего не понял, но я так понимаю я могу указать любой столбец из таблицы, и оно будет работать.
-
логично там дате ложить
-
хуже того, можно указать любую комбинацию выражений, это базовый и очень мощный инструмент.
partition by (x%2, a, sha666(d))
patrition by tuple() -
добрый день
Имеется следующая ситуация:
Linux Debian-94-stretch-64-LAMP 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 x86_64 GNU/Linux
Версия КХ - 1.1.54394
Результат df -h:
Filesystem Size Used Avail Use% Mounted on
udev 32G 0 32G 0% /dev
tmpfs 6.3G 506M 5.8G 8% /run
/dev/md2 2.0T 974G 907G 52% /
tmpfs 32G 4.0K 32G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/md1 488M 38M 424M 9% /boot
/dev/md3 42T 14T 27T 34% /home
tmpfs 6.3G 0 6.3G 0% /run/user/1005
tmpfs 6.3G 0 6.3G 0% /run/user/1001
tmpfs 6.3G 0 6.3G 0% /run/user/0
Я далек от администрирования и не очень соображаю в устройстве raid, но КХ явно хранит данные в /dev/md2, а хотелось бы конечно использовать память из /dev/md3.
Подскажите пожалуйста, можно ли это изменить в настройках КХ или следует менять что-то в ОС? Уместно ли спросить о каких-то best practice в данном случае? -
я бы смонтировал в линуксе md3 в /var/lib/clickhouse
-
Тут всплыла подсказка, при ошибочном создании таблицы типа ReplicatedMergeTree
ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/hits', '{replica}', EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID), EventTime), 8192)
То есть вместо EventDate я должен указать из своей таблицы столбец с датой
А вместо (CounterID, EventDate, intHash32(UserID), EventTime) указать стоблец с первичным ключом.
Верно понимаю ? -
в праймери кее вы должны указать праймери кей который будет ускорять ваши запросы
-
Скажите пожалуйста, а где в этом тексте
ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/hits', '{replica}', EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID), EventTime), 8192)
PrimaryKey ? -
первичный ключ -- это ключ сортировки, его назвали неправильно в КХ, чтобы всех запутать.
-
-
Так где получается в этом списке
ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/hits', '{replica}', EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID), EventTime), 8192)
Primary Key ? -
Это EventDate ? или CounterID ?
-
не пойму
-
Joined.
-
-
Это старый синтаксис, тут дата - это ключ партиционирования, потом ключ семплирования и сам ПК он задает сортировку
-
-
Так значит
-
понял
-
не просто
-
сложно даже)
-
спасибо всем !
-
=)
-
-
А где его почитать ?
-
-
Вот про это речь ?
ENGINE [=] MergeTree() [PARTITION BY expr] [ORDER BY expr] [SAMPLE BY expr] [SETTINGS name=value, ...] -
Где Order By - это первичный ключ
-
Угу
-
Понял. Спасибо, буду игратся)
-
т.е. сделать /dev/md3 mounted on /var/lib/clickhouse?
а где в таком случае будет храниться то что уже есть в /home ? -
ну так перенесите куда-нибудь, откуда я знаю куда вам надо
-
но само хранение данных КХ в любом случае не вариант никуда переносить, верно?
-
Все разобрался. Вдруг кто то такой же глупый как и я, будет искать пример создания по новому синтаксису, таблицы на движке Replicated Merge Tree.
Поясняю.
==============================
CREATE TABLE lexa_test
(
id Int64,
i_env Int64,
i_customer Int64,
i_account Int64,
creation_date Date
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/lexa_test', '{replica}')
PARTITION BY creation_date
ORDER BY id
в PARTITION BY нужно указать имя столбца с типом данных Date
а в ORDER BY нужно указать стоблец который будет первичным ключом
#пример #ReplicatedMergeTree #новый #синтаксис -
path
Путь к каталогу с данными.
Завершающий слеш обязателен.
Пример
<path>/var/lib/clickhouse/</path>
https://clickhouse.yandex/docs/ru/operations/server_settings/settings/#path -
PARTITION BY creation_date
это по-дневные партиции
PARTITION BY toYYYYMM(creation_date)
по-месячные -
Спасибо еще раз)
-
спасибо, проглядел.
а будут ли перенесены уже существующие данные при изменении path? -
нет (сдержал 5минутный рант с матами), как вообще такие идеи приходят?
-
ну мало ли.
-
я просто действительно совсем слаб с линуксом и администрированием, и пытаюсь понять как лучше действовать, не будет ли это чревато геморроем в будущем после изменения дефолтной настройки и тп
-
извините за глупые вопросы
-
а 42ТБ смонтировано в /home зачем? вертика?
-
вертики нет, так было изначально
-
изначально = после установки ОС (делалось не мной)
-
круто, ржачно.
-
да сделатьпросто симлинк в папку кликхауса и ок
-
-
без партиций не бывает в кх
-
@den_crane а вы случаем не занимались преобразованием из MergeTree в ReplicatedMergeTree ?
Просто в инструкции:
Переименуйте имеющуюся MergeTree таблицу, затем создайте со старым именем таблицу типа ReplicatedMergeTree. Перенесите данные из старой таблицы в поддиректорию detached в директории с данными новой таблицы (/var/lib/clickhouse/data/db_name/table_name/). Затем добавьте эти куски данных в рабочий набор с помощью выполнения запросов ALTER TABLE ATTACH PARTITION на одной из реплик.
Не понимаю что имеется ввиду под:
Перенесите данные из старой таблицы в поддиректорию detached в директории с данными новой таблицы (/var/lib/clickhouse/data/db_name/table_name/).
А где данные старой таблицы лежат ?
ls -la /var/lib/clickhouse/data/default/lexa_test_backup/
19750711_19750711_1_1_0
detached
format_version.txt
Мне папку состоящую в названии из чисел нужно перенести в
/var/lib/clickhouse/data/default/lexa_test ? -
а как понять с какой партицией создано? файлы так выглядят all_5458725_5458725_0
-
-
-
Добрый вечер! Кто-нибудь сталкивался с проблемой подгрузки файла словарей. Три одинаковые ноды на одной файл подгружается на двух других нет. Влоги ни каких ошибок не пишет. Версии 18.10 и 18ю12 пробовал
-
Привет! Подскажите, пожалуйста, по поводу AggregateFunction
Есть Materialized View с ENGINE = AggregatingMergeTree
, где есть колонка uniqExactState.
Можно ли сделать для этой колонку какую-либо операцию помимо uniqExactMerge?
В идеале, как-нибудь развернуть то что находится внутри. -
я так не делаю, у меня данных мало, не больше 10ТБ, мне проще insert новая select from старая.
-
Понял спасибо. Я только что выполнил по инструкции на сайте Преобразование из MergeTree в ReplicatedMergeTree, но данные из старой таблицы в новой не появились. Хотя все без ошибок сделал. Видимо ваш способ единственный правильный))
-
А что в логах?
-
то бишь хранить данные в /home, но поместить симлинк на них в /var/lib/clickhouse/?
-
ничего, иначе бы я до сути добрался, логирование в trace выставлено
-
Ну это самое простое решение
-
Детач аттач отлично работает для этого, плюс это супер быстро, чем перелить данные.
-
спасибо за совет
а как наиболее корректно/безопасно перенести уже существующие данные?
остановить КХ, скопировать всю папку /var/lib/clickhouse/ и запустить КХ? или это не так просто решается? -
Это ок если это то что вам нужно
-
Если на старом месте у вас ничего не остаётся это ок
-
понял, спасибо еще раз
-
Ребят скажите пожалуйста
-
Я вот хочу перенести данные из таблицы MergeTree в ReplicatedMergeTree
-
Если я так сделаю
-
INSERT INTO default.new_table SELECT * FROM default.old_table
-
это будет же работать ?
-
при условии что очередность и количество столбцов соблюдено
-
-
Ну так сработало
-
я про в принципе, это правильно ? или лучше так не делать ?
-
значит что-то сделали не так
-
Да, но перед этим делать что-то вроде SET max_threads = 1, max_block_size = 8192; если данных в таблице много
-
А много это сколько ? в Гигабайтах или в штуках ?
-
В штуках проще
-
-
около 100 млн записей
-
столбцов около 20
-
-
Это где высталять не подскажите ? Не могу найти в документации на сайте
-
-
-
Понятно теперь) спасибо буду пробовать)
-
а нет ли таймаута или счетчика через какое время проверять наличие файла?
-
на еще одной ноде подцепился файл с диктами
-
Детач аттач сработает за секунды
-
Погодите, разве нужно делать детач ?
В инструкции сказано что нужно скопировать файлы старой таблицы, в папку detach новой таблицы, после чего просто выполнить команду
ALTER TABLE default.lexa_test ATTACH PARTITION 19750711 -
Ну я делал все на лету так что надо
-
Понятно. Мне нужно понять сколько по времени займет перекидывания данных моим способом) мне кажется так проще
-
Попробую и узнаю)
-
Ну если данных много то очень много
-
Кнопки «сделать все хорошо» пока не существует.
-
Есть дока с типами таблиц которые есть в CH. Этого вполне хватит для того чтобы составить схему. Перелить можно чем угодно. Хоть через csv.
-
-
@stufently @kshvakov @den_crane
Перекинул следующим способом из MergeTree в ReplicatedMergeTree:
INSERT INTO default.new_table SELECT * FROM default.old_table
Elapsed: 98.473 sec. Processed 46.38 million rows, 14.33 GB (471.02 thousand rows/s., 145.50 MB/s.)
(это на виртуалке с 4 ядрами, и 15 Гб ОЗУ) -
В принципе это быстрее, чем в ручную делать перенос данных на диске, а потом детач и атач и все дела...
-
Мне так кажется
-
Детач аттач занимает несколько секунд
-
А пока наберешь нужные команды со всеми нюансами и параметрами уйдет пару минут)
-
так что плюс минус времени уходит одинаково
-
yandex/ClickHouse was tagged: v18.12.14-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v18.12.14-stable
Release notes:
v18.12.14-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
https://clickhouse.yandex/docs/ru/getting_started/example_datasets/nyc_taxi/#_1
вот тут есть пример, в котором данные сначала заливают в pg, оттуда в КХ -
Joined.
-
Joined.
-
Привет!
-
2018.09.13 17:08:15.628349 [ 23 ] {83} <Error> executeQuery: std::exception. Code: 1001, type: std::bad_typeid, e.what() = std::bad_typeid (from 127.0.0.1:36060) (in query: INSERT INTO dns.traffic VALUES)
-
Что-то новенькое
-
Деградация? ;( код вставки не менялся
-
Привет.
Скорее всего, версия сервера достаточно старая. Проверьте на версии 18.12.14. -
сейчас попробую, спасибо :)
-
Если у вас табличек много, вы уверены что вам КХ нужен?
-
когда всё делал в 5NF очень сложно понять как всё загнать в одну таблицу.
А потом узнаешь про массивы... -
Какой результат?
-
пробуем :)
-
-
-
Я сам не использовал chproxy. Отношусь хорошо :)
Вы имеете ввиду просто слияние результатов с разных серверов, без всяких распределённых агрегаций, сортировок? -
-
Это почти невозможно.
-
-
Нет, не реализовали.
-
а в планах есть реализация?
-
Нет, не реализовали.
-
Есть, но не в ближайших (не 2018).
-
они делают в том смысле что обращение будет не к distributed таблице одной ноды, а к дистрибьютид таблицам на разных нодах, но distributed таблицы все равно нужны на каждой ноде, ну и инсерты chproxy умеет делать прямо в шарды.
-
Гм, тогда я не понимаю, зачем это
-
у вас есть 10 нод, 5 шардов по 2 реплики, вы создаете дистрибьютид таблицу на каждой ноде.
теперь можно ходить и делать запросы на любой из 10 нод.
но у вас тупое приложение все время ходит к первой ноде, и эта нода делает финальные агрегации, и загружена больше всех.
вы ставите chproxy как балансер и начинаете ходить ко всем 10, все 10 загружены равномерно. -
-
- 14 September 2018 (88 messages)
-
Оставте справочники в постгресе и подключите их как словарь. Возможно ваши таблицы с логами по колонкам чуть более чем сильно совпадают, их можно в одну таблицу писать, просто создать доп колонку с типом логов и бросить ее в первичный ключ
-
Доброе утро! Есть 10 серверов и 1 csv, можно как-то параллелить загрузку?
-
Лить в distributed таблицу
-
Не будет параллельного чтения, только запись
-
-
Joined.
-
Привет!
В ответ на
TRUNCATE TABLE table
получил исключение:
Received exception from server (version 18.10.3):
Code: 48. DB::Exception: Received from 127.0.0.1:9003. DB::Exception: Can't proxy this query. Unsupported query type.
Я правильно понимаю, что для Replicated таблиц truncate просто не поддерживается? -
Joined.
-
-
-
Joined.
-
Тоже самое :(
-
2018.09.14 10:09:51.596455 [ 23 ] <Debug> MemoryTracker: Peak memory usage (total): 150.00 KiB.
2018.09.14 10:09:51.596472 [ 23 ] <Information> TCPHandler: Processed in 0.037 sec.
2018.09.14 10:09:52.010968 [ 23 ] {190} <Debug> executeQuery: (from 127.0.0.1:45300) INSERT INTO dns.traffic VALUES
2018.09.14 10:09:52.048632 [ 23 ] {190} <Error> executeQuery: std::exception. Code: 1001, type: std::bad_typeid, e.what() = std::bad_typeid (from 127.0.0.1:45300) (in query: INSERT INTO dns.traffic VALUES)
2018.09.14 10:09:52.048703 [ 23 ] <Debug> MemoryTracker: Peak memory usage (total): 150.00 KiB. -
Clickhouse issue
Clickhouse issue. GitHub Gist: instantly share code, notes, and snippets.
-
Joined.
-
посоны, как мне по красоте можно табличку вместе с данными из постгреса в кликхаус перенести?
-
-
Ну что? Есть идеи?
Могу подключиться к постгресу через odbc.
Могу сделать pgsql dump, clickhouse restore сделать не могу. -
-
-
ок, спс
-
-
Апну, ошибка продолжает сыпаться, куда копать не понятно :(
-
Сделайте пример для воспроизведения
-
Ошибка вызывается не запросом, а слиянием партиций, есть только полный трейс https://pastebin.com/A3M7XUmL
-
Интересно, он у вас в этом блоке, судя по всему, вообще колонок не видит. Есть схема таблицы и версия сервера?
-
18.10.3 revision 54405, структура https://pastebin.com/1QqBmnYv , запись и запросы в эту таблицу идут постоянно и поле, конечно же есть, оно ключевое
-
18.12.13:
SELECT
value,
formatReadableSize(value),
description
FROM system.metrics
WHERE metric = 'MemoryTracking'
┌─────────value─┬─formatReadableSize(value)─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 5090069495129 │ 4.63 TiB │ Total amount of memory (bytes) allocated in currently executing queries. Note that some memory allocations may not be accounted. │
└───────────────┴───────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.006 sec. -
-
в лимит упёрлись
-
max_memory_usage
-
-
-
В смысле, у меня, например, на не особо большом сервере для юзера установлен лимит:
<max_memory_usage replace="replace">6000000000</max_memory_usage> -
-
-
А... Перепутал сообщение об ошибке и результат запроса
-
Тут разве что заммапленое могло посчитаться...
-
-
-
еще такая ошибка:
Code: 49, e.displayText() = DB::Exception: Attempt to attach to nullptr thread group, e.what() = DB::Exception
при запросе:
CREATE TABLE db.table ON CLUSTER repl
ENGINE = Memory AS
SELECT
id,
ts,
sum(proc)
FROM db.table2
WHERE date = (today() - 1)
GROUP BY id
HAVING sum(proc) > 0
ORDER BY ts ASC
LIMIT 1000000 -
-
-
Если построить CREATE MATERIALIZED VIEW с таблицы MergeTree. В MergeTree применить ALTER TABLE name_table DELETE WHERE user_id>0, то эти данные останутся в MATERIALIZED VIEW?
-
Как их удалить в MATERIALIZED VIEW?
-
Пробовал кто-нибудь использовать JetBrains DataGrid для подключения к кликхаусу через https?
У меня пишет: cannot initialize http client -
-
Да, вот пару дней назад скачал.
-
да, насколько я помню, где-то в середине августа в минорном релизе
-
если кому интересно, выставил в Advanced sslmode: none и всё заработало
-
MemoryTracking после обновления на 18.12.13 показывает какую-то дичь на всех репликах
-
пришло время обновиться до 18.12.14)
-
-
-
-
-
DataGrip 2018.2.2: ClickHouse Support and Bugfixes | The DataGrip Blog
With just a few weeks since the last minor update, we're in hurry again to bring you a fresh portion of improvements. Please welcome DataGrip 2018.2.2.One of the highlights in this update is added
-
-
Нужно issue на гитхабе хоть с каким-нибудь описанием. А то потеряется в чате.
-
ok
-
Joined.
-
останутся, данные MV лежат в обычной таблице, оттуда таким же alter delete удаляйте. Если вы не называли/создавали таблицу для MV (для синтаксиса create mat view ... to ... as), то MV таблица называется .inner.{MVname}....
-
неплохо, кроме цены =(
-
Ну так покупайте со скидками)
-
-
Привет!
Вчера попрбовали decimal | LowCardinality, перелили таблицу и сделали optimize final.
Сегодня обновили КХ до 18.12.14 и КХ не стартанул из-за ошибок:
Uncompressed size of column id_dep(19624475) is not divisible by the size of value
Колонка объявлена как id_dep LowCardinality(UInt32)
Могу выслать логи если проблема не известная… -
Joined.
-
Пригодится.
-
На всякий случай - пока LowCardinality годится для тестирования, но не для продакшена.
-
Кстати, от LowCardinality(UInt32) наверное большого профита не будет. Ведь UInt32 - это уже намного лучше, чем String.
-
-
Имеется ввиду - где немного значений?
-
-
Не много уникальных значений
-
Alter, наверное, можно сделать. Но я не проверял. Данные все равно перезапишутся вместе с индексами.
-
Проверил. Получилось.
-
Можно сразу в тест добавить...
-
А словарь от LowCardinality где храниться? Я полагал что alter со сменой типа у словаря будет достаточно дешевой операцией.
-
добавил: https://github.com/yandex/ClickHouse/pull/3138/commits/936b4789bdca69a87244ad4178b814830dd0b164Low cardinality group by by KochetovNicolai · Pull Request #3138 · yandex/ClickHouse
I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en
-
Словарь хранится в отдельном файле. Некоторые столбцы имеют несколько файлов с данными (сериализуются в несколько "потоков"), в том числе, LowCardinality.
ALTER для столбцов, у которых меняется физическое представление, реализуется так же, как чтение, CAST, запись. Операция по смене типа словаря, может быть дешёвой, за счёт маленького объёма данных, которых нужно прочитать с диска и записать обратно. По CPU не уверен, может быть не очень дёшево.
(бывают случаи, когда ALTER бесплатен - например, замена UInt32 на DateTime и подобное). -
Можно было бы сделать дешевой для некоторых случаев, но нужно руками писать оптимизацию. Сейчас еще есть проблема с тем, что поедут индексы, так как в начале словаря всегда хранится значение по умолчанию. В случае строк - это пустая строка, и ее нельзя сопоставить с числом.
-
-
Там есть некоторая специализация для Nullable. Возможно как раз бесплатная с точки зрения хранения.
Николай ответит позже (~ через пол часа). -
Понятно, я исходил из предположения, что это не затрагивает индексы, т.к. результат сранения будет такой же( select 1 > 0, '1' > '0'; ), соответственно и засечки на том же месте. И при сменене типа в словаре значение по умолчанию будет такое как в исходном..
-
С точки зрения хранения бесплатный. Но в некоторых местах есть overhead.
-
-
Коллеги, подскажите пожалуйста в связке GROUP BY ... ORDER BY ... разве не будет в any первое значение в отсортированной группе. А в anyLast последнее?
ORDER BY же после GROUP BY выполняется вроде бы как
value | group
------+------
1 | 1
2 | 1
3 | 2
4 | 3
5 | 3
SELECT group, any(value) as open, anyLast(value) as close FROM t GROUP BY group ORDER BY value;
group | open | close
------+-----+------
1 | 1 | 2
2 | 3 | 3
3 | 4 | 5
SELECT
group,
(SELECT value FROM t tt WHERE tt.group = t.group ORDER BY value ASC LIMIT 1) as open,
(SELECT value FROM t tt WHERE tt.group = t.group ORDER BY value DESC LIMIT 1) as close
FROM t
GROUP BY group
ORDER BY group ASC;
group | open | close
------+-----+------
1 | 1 | 2
2 | 3 | 3
3 | 4 | 5 -
anyLast и any любое значение возвращают
anyLast(x)
Выбирает последнее попавшееся значение. Результат так же недетерминирован, как и для функции any.
потому что 48 потоков выполняют запрос и кто-то вернет первый что-то, и это будет any
коррелированные запросы в КХ не работают (вычисляются один раз как константа).
create table xx (a Int64, b Int64) engine = MergeTree partition by tuple() order by tuple()
insert into xx select number, 0 from numbers(1000000);
insert into xx select number+1000, 1 from numbers(1000000);
select b,o,e from (
select arraySort(groupArray(a)) ar,b,ar[1] o, ar[-1] e from xx group by b)
order by b - 15 September 2018 (32 messages)
-
-
Ну вы хотя бы плюс-минус последнее значение получите, а не первое. Например, если у вас какие-нибудь логи ошибок, то вы можете делать какую-нибудь группировку и потом делать anyLast(message) и будете получать плюс-минус последнее релевантное сообщение об ошибке из группы
-
для меня непонятно, что такое «плюс-минус последнее». Почему тогда any не называется anyFirst, если её семантика — вернуть «плюс-минус первую» запись?
Мне же anyLast может вернуть и первую запись, просто так повезёт? -
Если вам нужно первое или последнее, есть argMin/argMax
-
верно, о том и речь
-
А кто-то выбивал уже "Attempted access has violated the permissions assigned to the memory area" на 18.12.14 ?
-
забил тикет, вроде дублей не видел https://github.com/yandex/ClickHouse/issues/3141Attempted access has violated the permissions assigned to the memory area · Issue #3141 · yandex/ClickHouse
Hello! I just migrated to 18.12.14 and noticed number of failures for old application which just insert data into Clickhouse using C++ library: https://github.com/artpaul/clickhouse-cpp From client...
-
Нет, пока не сталкивались. Возможно это как-то связано с особенностью работы библиотеки clickhouse-cpp (хотя она должна быть совместимой). Пока информации не хватает.
-
Угу, с 18.10.3 работает отлично
-
Что-то явно поменялось
-
я прочитал changelog и чего-то что могло повлиять не вижу
-
Могу собрать любой дебаг, я воспроизвел баг в тест окружении
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Возможно, проблемы из-за того, что других столбцов нет. У меня не работал default только когда явно null передавал.
-
Кх рассчитан на кластер, там такое будет слишком накладно. Поэтому отталкиваются от writetime в таких случаях. Добавьте номер шарда к нему как младший разряд и можете на него смотреть как на последовательность с пропусками.
-
Хотя имхо стоило бы и в таких случаях применять дефолт, если столбец не nullabe
-
-
-
КХ это DWH, какой смысл генерить serial или UUID в КХ? Идентификатор должен появится в источнике который сгенерил данные.
-
Если вам нужен auto increment в КХ вы точно что-то странное делаете.
- 16 September 2018 (28 messages)
-
yandex/ClickHouse was tagged: v18.12.17-stable
Link: https://github.com/yandex/ClickHouse/releases/tag/v18.12.17-stable
Release notes:
v18.12.17-stableyandex/ClickHouseClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
А где можно changelog глянуть?
-
-
Joined.
-
Приветствую коллег! Подскажите пжлст, откуда подгружаются include в clickhouse server для debian и ubuntu
разместил макрос в /etc/clickhouse-server/conf.d/macros.xml, пытаюсь создать по tutorial-у replicated таблицу:
CREATE TABLE ontime_replica (...)
ENGINE = ReplicatedMergeTree(
'/clickhouse_perftest/tables/{shard}/ontime',
'{replica}',
FlightDate,
(Year, FlightDate),
8192);
получаю ошибку
Received exception from server (version 18.12.14):
Code: 62. DB::Exception: Received from 127.0.0.1:9000. DB::Exception: No macro shard in config. -
Joined.
-
-
-
можно в /etc/clickhouse-server/config-preprocessed.xml посмотреть во что инклуд отрендерился и в логах на ошибки /var/log/clickhouse/...
ну и таблицы system.macros system.clusters -
вопрос в том, где их КХ по умолчанию ищет
-
у вас все похоже на правду
https://clickhouse.yandex/docs/en/operations/configuration_files/
ndividual settings can be overridden in the *.xml and *.conf files in the conf.d and config.d directories next to the config file.
вот например мой:
# cat /etc/clickhouse-server/conf.d/macros.xml
<?xml version="1.0" ?>
<yandex>
<macros>
<cluster>oStaging24</cluster>
<replica>test316</replica>
<shard>1</shard>
</macros>
</yandex> -
о, спасибо
-
я неправильно сам xml оформил значит
-
go драйверов больше одного
все которые я видел, работают по http, значит порт куда подключаться это 8123 -
этот https://github.com/kshvakov/clickhouse
по tcpGitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouseGolang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
-
ну а эти по http
https://github.com/roistat/go-clickhouse
https://github.com/mailru/go-clickhouse -
Да этот, сори это мне кажется было очевидно
-
-
-
-
-
-
возможно в native протоколе что-то изменили или драйвер какую-то фичу еще не поддерживает.
-
-
-
-
Ok
- 17 September 2018 (206 messages)
-
-
здравствуйте!
есть проблема, поломалась репликация
при старте сервера при инициализации возникает такое:
2018.09.17 10:29:16.783466 [ 10 ] <Error> void ZooKeeperImpl::ZooKeeper::receiveEvent(): Code: 999, e.displayText() = ZooKeeperImpl::Exception: Too large array size while reading from ZooKeeper (Marshalling error), e.what() = ZooKeeperImpl::Exception, Stack trace:
0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0x16) [0x56d06c6]
1. /usr/bin/clickhouse-server(ZooKeeperImpl::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0xce) [0x54579ee]
2. /usr/bin/clickhouse-server(ZooKeeperImpl::ZooKeeper::ListResponse::readImpl(DB::ReadBuffer&)+0x156) [0x5458cd6]
3. /usr/bin/clickhouse-server(ZooKeeperImpl::ZooKeeper::receiveEvent()+0x543) [0x545ea83]
4. /usr/bin/clickhouse-server(ZooKeeperImpl::ZooKeeper::receiveThread()+0x2b2) [0x545f232]
5. /usr/bin/clickhouse-server() [0x930310f]
6. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f40cf0476ba]
7. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f40ce87041d]
далее везде void DB::StorageReplicatedMergeTree::mutationsUpdatingTask(): Code: 999, e.displayText() = ZooKeeperImpl::Exception: Session expired (Session expired), e.what() = ZooKeeperImpl::Exception
кто-то сталкивался? что можно сделать? -
всем привет, столкнулся с проблемой агрегации данных на разных машинах в кластере, а именно, есть 2 ноды по 256 гигов памяти и много процессоров, есть большая distibuted таблица, хочется сделать агрегат и выгрузить в csv, при попытке сделать это валится в ошибку: Attempt to read after eof: while receiving packet from localhost. Хочеться уменьшить набор данных, который отправляется на доагрегацию на первую машину
-
-
-
-
-
Joined.
-
-
-
https://www.youtube.com/watch?v=F-o-a00R4fc
https://yandex.github.io/clickhouse-presentations/meetup5/ -
спасибо
-
-
-
-
Всем добрый день!
Не нашел правил группы, если не по теме — без проблем удалю вопрос.
Ищу себе в команду человека, у которого есть опыт миграции на Clickhouse (в идеале — с вертики). Задача — мигрировать =) Разобраться в текущих потоках данных, придумать, как переложить их на Clickhouse, поднять Clickhouse (kubernetes или подобная архтикетура), провести весь процесс миграции.
Если кому-то понравилась миграция (понимаю, что таких, скорее всего, мало, но вдруг =) ) и хочется повторить — пишите в лс. -
как активный пользователь кубернетеса предположу, что кубернетис в вашем уравнении будет лишней переменной
-
-
Если не секрет, чем плох k8s в связке с clickhouse? В целом тем, что там не очень здорово хранилища поднимать, или есть особенности?
-
-
k8s не рекомендуется в тех случаях, когда вам надо хранить данные. Об этом постоянно говорят идеологи кубера (включая даже Сета Варго). Кубер – это про контейнеры, а контейнеры не хранят состояния (точнее могут, но не должны). Вторая проблема в том, что кубер - это сложно. Заставить его нормально работать, поддерживать и отлаживать его – это тоже сложно. Безопасность кубера - это тоже сложно. Если вы ставите кубер для того, чтобы запускать в нем кликхауз (и только для этого) – вы сильно переусложняете свою архитектуру. Архитектура должна быть максимально простой. Это, разумеется, мое мнение. Готов раскрыть подробнее. Хотя это и оффтоп
-
-
Тома подключаются к контейнерам. Контейнеры работают с данными. Но это в целом довольно хрупкая конструкция. И да, идеология работы с контейнерами предполагает "бесконечное" горизонтальное масштабирование. Чего контейнер с сохранением состояния обеспечить не сможет
-
-
У меня на железных серверах если сервер/сервис аварийно завершает работу, пара таблиц да кораптнется, а контейнеры это вообще неустойчивая единица, не могу предположить, как можно хранить данные, управляемые КХ в контейнере сколь-нибудь долго
-
-
а как вы к этим томам обращаетесь? из контейнера же?
-
-
ну то есть у вас контейнер хранит состояние. Просто для хранения состояния он использует том. Вообще, задача "прицепить к каждому контейнеру его строго определенный том" в кубере решается... Но болезненным и извращенным путем. Что явно подсказывает, что делать так не стоит
-
плюс у контейнеров очень плохо предсказывается производительность. Кубер - классная штука. Но это сложно, я серьезно
-
А что в odbc опять сломан в последних версиях ClickHouse?
-
Пробую сделать select * from odbc('Driver={PostgreSQL Unicode};UID=analytic;PWD=*****;Server=192.168.10.10;Port=5532;DATABASE=production', 'jobs') limit 100
Получаю:
HTTP status code: 500 Internal Server Error, body: Error getting columns from ODBC 'Code: 404, e.displayText() = DB::Exception: ODBC connection string has forbidden parameter, e.what() = DB::Exception' -
Согласен, в нашем случае k8s существует не из-за кликхауса, а сам по себе. Это просто один из вариантов, куда его можно развернуть. =)
-
Joined.
-
Как будто он порт игнорирует.
Смотрю tcpdump на 5532, ничего не приходит. -
if (name == "FILEDSN" || name == "SAVEFILE" || name == "DRIVER")
throw Exception("ODBC connection string has forbidden parameter", ErrorCodes::BAD_ODBC_CONNECTION_STRING); -
И как теперь быть?
-
ок, допустим. а разворачивать и обновлять как? шефом или ручками?
-
шеф или ансибл. поверьте, вы не захотите обновлять хранилище данных в полностью автоматическом режиме без наблюдения оператора
-
Это как раз несколько ограничивает такое совсем "облачное" использование КХ, где масштабирование вверх/вниз должно происходить без переконфигурирования и конфигурация кластера / "облака" сильно динамична. В настоящее время КХ требует много "ручного" / "полуручного" конфигурирования, и конфигурацяи должна быть относительно статична. Поэтому всякие там кубернетисы мало что дают.
В идеале конфигурация кластера наверное должна поддерживаться чем-то типа discovery service куда регистрируется каждый новый хост, и тогда автоматически начинает получает получать данные и запросы и подхватывая от соседей данные. В случае если какой-то хост падает / пропадет то куски которые на нём были должны скопироваться на какие-то другие хосты в кластере, чтобы обеспечить нужный replication factor. Но чтобы это нормально работало это должна "нативно" поддерживать сама база. -
-
@milovidov_an вы не планируете что-то типа этого? ^^ КХ реально крут в процессинге данных, но вот с распределенностью у него не всё гладно. Идеально - это что-то типа кликхаус поверх торрнетов :) Когда части размазываются между участиниками сети в соответствии с представлением сети о том как должны быть "размазаны" данные :)
-
-
-
да вроде как service discovery на зукипере не сложно сделать.
-
С DSN у меня другая траба:
Я делаю вот так select * from odbc('DSN=production', 'jobs') limit 100 но эти 100 строк кликхаус достаёт больше минуты.
При том с той же тачки через isql production всё работает мгновенно. Куда компать? -
-
К сожалению, я не настоящий сварщик и odbc не использовал - просто копнул в место исключения, вдруг поможет :)
-
и где там ответ на мой вопрос?
-
В смысле - попробуйте сконфигурировать DSN в системе, вместо указания драйвера в запросе.
-
Так я это уже сделал. Всё работает, но очень медленно.
Кликхаус достаёт 100 строчек больше минуты, а через системный isql всё мгновенно -
Могу только предположить, что он сначала все данные вытягиваает из постгреса, а лимит выполняет уже на стороне КХ.
-
Так и есть (как выше ответили). LIMIT выполняется из Clickhouse, так что вытягивается вся таблица.
-
хм..
-
ок, спс!
-
-
Потому что кликхаус тоже умеет :) Скорее всего просто специфика того в какой последовательности обрабатывается запрос.
-
Семантика запроса такая. odbc - табличная функция, которая возвращает поток данных. Чтобы запрос пробрасывался в нижележащий движок, нужна функция, в которую будет пробрасываться целиком запрос
-
Хм. Интересная штуковина - кликхаус позволяет создавать/хранить состояния аггрегатных функций с -If. Только я не понимаю 1) зачем 2) как это потом использовать? :) Контекст: как оказалось между groupArrayStateIf и groupArrayIfState есть большая разница. Второе создает тип данных AggregateFunction(groupArrayIf, String, UInt8), на которым не понятно как сделать Merge. :)
-
на центосе сборка 18.12.14 от альтинити - в клиенте стрелки на клавиатуре не работают, печатаются символы:
clickhouse-client
ClickHouse client version 18.12.14.
Connecting to localhost:9000.
Connected to ClickHouse server version 18.12.14 revision 54407.
1clickhouse0004.ad.rambler.tech :) ^[[A^[[B^[[C^[[D -
-
Что-то у них с readline поломалось. Им уже сообщили.
-
Спс
-
the newest version 18.12.14 from Altinity seems has some problem, the auto complete function seems not work on clickhouse-client
-
Thank you for alert, we will investigate what's happened with the build (every time building clickhouse is a quest) and fix ASAP
-
у меня базы показывает как схемы, а таблицы вообще не показывает. У всех так?
-
У меня всё ок
-
Мы что-то типа такого делаем, только без торентов, но с автодискавери и кучей автоматизации, но времени сильно нехватает, надеюсь к новому году что-то на попробовать выкатим )
-
-
-
В код кликхаус или поверх КХ?
-
Поверх КХ, сейчас форкать КХ и что-то делать отдельно весьма сомнительное решение.
-
Ну я не в смысле форкать, а в смысле какое-нибудь allow_experimental_service_discovery = 1 и в основном бранче. Хотя вряд ли это легко воплотимо без очень серьезного раскапывания кода.
-
-
Да, есть такое, поэтому пока решение писать все рядом с основным функционалом, если пойдет хорошо, можно будет подумать о миграции части функционала в сам сервер
-
Поддержка такой магии "внутри" была бы сильно здоровее чем наружняя "обертка". Если представить себе что около КХ ещё нужно поставить какого-то демона который будет как-то следить дополнительно за тем что происходит в кластере и править конфигурацию кластера "на лету" - как-то страшновато становится :) Хотя наверное реально всё - нужно только интенсивно взаимодествовать с зукипером и в конфигах повсеместно использовать from_zk=...
-
Joined.
-
Мы сами конфиги генерим, а данные храним в ZK
-
-
Ну сгенерить - полбеды, а как подменять? При том что некоторые изменения могут и рестарта требовать?
-
С рестартом как раз самое интересное, нужно расчитать что можно рестартить (учесть какие есть шарды и реплики) и каскадно запускать рестарт.
-
18.12.17 - есть changelog? Какая версия click на текущий момент является достаточно стабильной?
-
Ну и кроме того если это не виртуалка, а железный сервер, то варианты типа "а давайте дадим этому демону права писать куда-то в /etc/ " звучат так себе. Наши ОПсы сильно возмущались уже тем что кликхаус пишет свои -processed.xml в /etc/.
-
-
Добрый день. Таблица с партиционированием по дню (PARTITION BY date). При создани бэкапа командой FREEZE за год появляется такая ошибка:
user@ip-10-0-0-1:~# clickhouse-client --query="ALTER TABLE test.myTable FREEZE PARTITION '2018';"
Received exception from server (version 1.1.54342):
Code: 33. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Cannot read all data.
Аналогичный запрос для таблицы с партиционированием по умолчанию работает корректно.
Подскажите, как можно решить проблему годового бэкапа? Возможно, как-то задать имени партиции в числовом формате (20180101) вместо строкового ('2018-01-01') -
коллеги, вопрос - насколько вероятны проблемы, если в одном кластере будут очень старый кликхауз и современный?
-
Если "очень старый" то весьма вероятны. В changelog есть информация про обратной совместимости.
-
спасибо. Я хотел убедится. При реэкспорте в формате native проблем быть не должно?
-
Могут не поддерживаться новые типы, если их не использовать то - ОК
-
мне надо из старого в новый вытащить)
-
-
Обычно прямая миграция на более новую версию возможна. Проблемы могут появляться если одновременно в кластере сильно разные версии живут.
-
супер, спасибо
-
у вас time_ все время разный, назовите по другому
CREATE MATERIALIZED VIEW mtrades
ENGINE = AggregatingMergeTree(EventDate, (isin_, time__), 8192) POPULATE AS
select
toDate(time_) as EventDate,
isin_,
toInt64(intDiv(toUInt32(time_), 60) * 60) AS time__
argMinState(price_, time__) as open_,
argMaxState(price_, time__) as close_,
sumState(abs(amount_)) as amount_,
from trades
GROUP BY EventDate, isin_, time__
select isin_,
argMinMerge(open_) as open_,
argMaxMerge(close_) as close_,
sumMerge(volume_) as volume_,
time__
from mtrades
group by isin_, time__
https://clickhouse.yandex/docs/en/query_language/functions/date_time_functions/#tostartofminute -
-
а что вы хотите удалять?
-
если к вам приходят более новые данные по тем же id, то ReplacingMergeTree будет хорошим решением
-
в этом движке нужно явно управлять версиями, чтобы записи схлопнуть
-
С ReplacingMergeTree вы будете получать фантомные записи
-
не будет возможности принудительно схлопнуть записи, у CollapsingMergeTree можно указать FINAL
-
Записи из источника данных
-
в ReplacingMergeTree вы тоже можете сделать FINAL вместе с OPTIMIZE TABLE и будет хорошо
-
если у вас данные часто меняются по разным полям, то наверное вам не подойдет это решение, если данные можно перетирать по ключам, то это то, что вам нужно
-
-
-
-
ALTER TABLE DELETE?
-
По ключам перетирать можно, но что делать с записями, которые удаляются из таблицы-источника. Для update-insert есть вариант использовать триггеры и COPY TO PROGRAM, а вот насчет удалений не придумал
-
-
не вариант, данных террабайты будут
-
наверное здесь как раз подойдет CollapsingMergeTree с досыланием -1 на нужные записи
-
Спасибо, тоже к этому прихожу.
-
Это не сильно лучше чем ALTER TABLE DELETE и очень сильно не гарантирует что данные будут удалены ;)
-
они ведь рано или поздно удалятся, как вы писали где-то, optimize final схлопаывает их принудительно)
-
Когда-то удаляться, но это не точно. Плюс старые и большие куски могут долго не мержиться или не мержиться вовсе. Колапсом хорошо работать по достаточно новым данным
-
OPTIMIZE дорогой процесс
-
и он не выполняется вместе с FINAL
-
FINAL на лету отдаст уже актуальные данные с учетом поля sign
-
-
какое бы вы посоветовали решение для Андрея, в этом случае?
-
Не удалять ) Надо знать что за задача и детали, сейчас есть еоробочное решение через ALTER DELETE, нужно его смотреть, возможно есть лучшие решение, но нужно больше деталей как и что будет храниться.
-
В планах есть, идёт пунктом "Облачные таблицы".
-
кейсы чаще всего удалять, либо перезаписывать что-то, с ALTER не все так однозначно, а схлопнуть строки по условием, кажется простым решением, но только с артефактами)
-
Это не "конек" КХ, зачастую на практике проще перезалить партицию с откоректированными данными, но это тоже сильно редкие операции
-
👍
-
@milovidov_an а на сколько стабильна уже 18 ветка? А то что не день то о каком то баге пишут, хотя не всегда конечно связано это именно с самим кх. Но проблем явно больше чем было раньше, хотя возможно просто больше людей в чате стало.
-
Joined.
-
добрый день, уважаемые
-
требуется помощь
-
при загрузке данных через $ clickhouse-client -n < data.sql
загрузка падает с errno: 28 -
причём места достаточно
-
и мониторю место при загрузке
-
но.. стоит подключиться с помощью strace к процессу clickhouse-server, то больше не падает
-
VERSION_FULL ClickHouse 18.12.14
VERSION_DESCRIBE v18.12.14-testing
VERSION_GITHASH 84cde3429bec15028992497b3ab7e7a0fb53a253
VERSION_REVISION 54407 -
по заббиксу вижу только что упирается в память
-
виртуалка тестовая, оперативки 8 гигов
-
ext4 ?
-
покажи df -h полностью
-
а в логе КХ сервера что?
-
да, до этого был xfs
-
-
у вас на руте кончилось место епта
-
как мы его мониторите не понятно , заббикс уже давно вам прислал об этом алерт
-
это не влияет, там данные strace не удалил
-
ну сомнительно что не влияет , так ка квероятно влияет , он же в рут тоже пишет что то
-
-
данные для ClickHouse вынесены на отдельный диск
-
ну в /var/log точно пишется
-
ну он даже лог у вас не может записать чтобы вы узнали что не так
-
в общем почистите рут и все будет норм заливаться
-
du --max-depth 1 -h / --exclude=/var/lib/clickhouse
похоже, вас ждут сюрпризы -
ругается на нехватку места в /var/lib/clickhouse, который как видно имеет достаточно свободного места
-
а места не хватает на /
-
удалил данные strace, запустил заново, минут через 5 упадёт
-
-
это перед запуском
-
вот ошибка
Code: 1000. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: File access error: no space left on device: /var/lib/clickhouse/data/default/pack_statistics/tmp_insert_20180608_20180608_125748_125748_0.
как видно, не на корневой диск ругается -
да, использую MergeTree
-
А что дф ?
-
покади df -h и df -i
-
просто странно что вы записали за 2 минуты 30 гигов в кх
-
на айноды тоже думал
-
мониторинг по айнодам показывает что всё нормально
-
ну сейчас то дф что показывает ?
-
-
прям перед падением
-
в каком логе смотреть?
-
у вас кончаются иноды
-
вот теперь заметил
-
там пустая файлсистема? ее стоит переформатировать
-
что с этим можно сделать?
-
на пустой та же проблема была
-
форматишь заново в ext4 и задаешь большое количество инодов
-
для примера какое?
-
там просто по дефолту количество инодов зависит от размера диска а на 40 гигов их будет очень мало
-
ну задайте в 100 раз больше инодов чем сейчас
-
спасибо, завтра попробую
-
Интересно кстати - почему столько инодов занято?
-
Мелкие вставки?
-
Вангую: внутри того data.sql который вы пайпуете в clickhouse-client много-много однострочных INSERT.
-
А должен быть один :)
-
и много-много VALUES.
-
У нас на продакшене она используется. Если говорить про отдельные релизы, то по количеству обнаруженных ошибок, 18.12 существенно лучше, чем 18.10, 18.5, 18.1.
-
Ещё хотелось бы узнать - если сейчас есть какой-либо баг, обнаруженный в последней версии, который вас беспокоит - то какой именно?
-
друзья, а вот расскажите, очищаются ли данные в кликхаусе как-то? то есть он же в основном для метрик используется, а метрики, далеко не всегда нужно хранить годами. как происходит освобождение памяти от уже ненужного?
-
Данные сами собой не очищаются. Это надо делать вручную. Например, удалением старых партиций.
-
аа, ок
-
пасиб
-
счетчик MemoryTracking сломался
-
-
Joined.
-
поменяйте функцию на дельту
-
Счётчик (глобальный) действительно сейчас показывает не то, что надо. Для отдельных запросов отслеживание памяти - Ок.
-
думаете будет норм показывать? расход оперативки для всех запросов на текущий момент
-
думаю - да. судя по графику - счетчик является каунтером, то есть он показывает не текущее значение, а прирост
-
пропишете дельту - будут реальные цифры
-
Но так не должно быть.
-
Добрый вечер! Подскажите пожалуйста, а вот этот пункт "Protobuf and Parquet input and output formats" в какой стадии сейдас находится?
-
Есть рабочие pull requests, но их нужно доделывать. Внешний разработчик (@luc1ph3r) хочет довести до разумного состояния до октября (но я не уверен, что это будет), потом будем сами доделывать.
-
Судя по коммиту построение схемы таблицы по протобуф описанию не предполагается? Возможно с какими-то ограничениями по вложенности сообщений...Только загрузка/выгрузка данных или есть что-то в перспективе? Было бы очень прикольно скормить КХ .proto файл и получить на выходе готовые талицы и возможность лить данные в соответствующем формате :) Ну конечно мечтать не вредно :)
-
Пока нет - только загрузка в таблицу с более-менее соответствующей схемой, и выгрузка из таблицы в схеме, которая выводится из схемы таблицы.
-
Сейчас разберёмся с некоторыми мелочами и напишу в личку, как помочь разобраться.
-
спасибо! :)
-
-
-
- 18 September 2018 (77 messages)
-
Joined.
-
Joined.
-
-
спам же
-
-
-
@milovidov_an Алексей, нашел вашу цитату "После вставки в Distributed таблицу, отправка данных на удалённые серверы производится полностью асинхронно. Если при отправке возникает ошибка, её следует смотреть в логе отправляющего сервера."
Сохранилось ли такое же поведение сейчас?
Интересен момент с возвращением статуса. Хотелось бы или получать ошибочный статус при невозможности вставки данных на другие шарды, а не сообщение в лог, или может быть повторные попытки отправки данных на другие шарды. -
decimal сейчас в активной разработке, в свежих сборках можно уже потестить
-
Можно синхронную вставку включить insert_distributed_sync
-
спасибо!
-
а есть по ним документация?
-
Пока нет, но там мало что от SQL стандарта отличается + можно по тестам ориентироваться
-
главный вопрос сколько можно до и после ? ( знаков я имею ввиду )
-
Всего 38 знаков.
-
-
Коллеги мне помогли разобраться, вроде бы ошибка в драйвере
Скоро будет ишью -
-
-
-
Добрый день!
Есть запрос вида:
SELECT ...
FROM ...
WHERE ...
AND test_id IN ( SELECT test_id... )
GROUP BY ...
ANY LEFT JOIN (
SELECT ...
FROM ...
WHERE ...
AND test_id IN ( SELECT test_id... )
GROUP BY ...
ANY LEFT JOIN (
SELECT ...
FROM ...
WHERE ...
AND test_id IN ( SELECT test_id... )
)
USING test_id
LIMIT ...
в нём все три подзапроса SELECT test_id... совершенно одинаковы;
будут ли они вычислены в CH только один раз? -
Хорошо, давайте issue буду править ;)
-
[read meta] unexpected packet [5] from server #122
Tagged version v1.3.4. ClickHouse yandex/clickhouse-server:18.12.17. db.SetConnMaxLifetime(0) db.SetMaxOpenConns(2) db.SetMaxIdleConns(2) First connection is opened: [clickhouse]host(s)=127.0.0.1:9001, database=default, username=default ...
-
Нет
-
это печально, синтаксис, когда хост отдельно, а порт отдельно полностью инопланетянский и неудобный
-
-
так исторически сложилось, но сделать новый вариант не сложно
-
в Changelog нашел, а в документации нет
-
-
-
Нет
-
-
Я думаю что сравнивать бесполезно, т.к. в CH слишком "своя" реализация напоминающая SQL. Тут больше подойдет название "SQL подобный" синтаксис запросов
-
-
Алексей, то есть если будет в батче больше 1млн строк, то атомарность INSERT-а не будет работать? Тут не совсем понятно
-
Будет, размер блока может быть любым
-
Можно ли как-то организовать вставку в Distributed таблицу не перечисляя все поля таблицы (для некоторых есть DEFAULT)?
Перестало работать после определения insert_distributed_sync=1
Сейчас выдает Code: 171. DB::Exception: Received from localhost:9001, 127.0.0.1. DB::Exception: Block structure mismatch in RemoteBlockOutputStream stream: different number of columns: -
Спасибо, но всё равно непонятно, к чему там в реплае оговорка про 1 млн строк... Типа SELECT по умолчанию может отставать на 1млн записей, ещё не подтверждённой записи недавних данных?
-
-
-
Коллеги, всем привет!
Недавно начали только использовать ClickHouse ищем специалиста который может поконсультировать на платной основе нашу разработку на предмет правильности использования и тонкостей настройки -
потому что параметр по умолчанию раверн 1млн
t.me/clickhouse_ru/63449Denny Crane in ClickHouse не тормозитmax_insert_block_size для вставки с клиента, max_block_size для insert into t select .. from for i in seq 1 20000000; do echo $i; done > x.tsv echo xxx >> x.tsv for i in seq 1 2000; do echo $i; done >> x.tsv drop table i; create table i(a Int64) ENGINE=MergeTree PARTITION by tuple() order by tuple(); cat x.tsv |clickhouse-client --max_insert_block_size 30000000 -q 'insert into i format TSV' Code: 27. DB::Exception: Cannot parse input..... select count() from i; 0 rows in set. Elapsed: 0.001 sec.
-
-
Joined.
-
-
каждая колонка это отдельный файл
-
Насколько я помню, всё-таки будут выполнены несколько раз.
-
Это определяется настройкой max_insert_block_size. Её можно указать как в clickhouse-client, так и в HTTP интерфейсе. Блоки будут собираться такого размера из строк, и вставка каждого блока будет атомарной.
-
Не видел пока текста с подробной сводкой.
-
Возможно, Altinity сможет помочь. https://www.altinity.com/ Хотя я даже не знаю, начиная с какого размера, они заинтересованы.ClickHouse Software And Services — Altinity
Deploy and operate ClickHouse, a lightning fast, open source SQL data warehouse for real-time analytics, time series, and log analysis.
-
-
Да.
-
-
-
-
Joined.
-
Добрый день. Подскажите, как быть. Впритык не вижу в чем проблема. Есть основная таблица stat (MergeTree). Также есть view_general (VIEW над stat). Далее выполняю последовательно запросы над view_general:
1) Вытягиваю данные за последнюю неделю - данные отдаются в полной мере.
2) Затем тащу данные за последние сутки - данные отдаются в полной мере.
3) Пробую вновь вытащить данные за неделю - отдаются данные лишь за последние сутки.
Проблема наблюдается и в запросах через веб и в cli. -
-
-
может прибавиться несколько записей, буквально единицы
-
обычная
-
а версия КХ последняя?
тогда enable_optimize_predicate_expression = 0 и пересоздать view -
v18.12.17, спасибо, работает*
-
Joined.
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
-
господа,
во-первых большое спасибо за clickhouse, больше года используем у себя и просто счастливы что появилась такая штука
очень не хватает работы с нормальной геобазой. я понимаю что яндексовая закрыта и снаружи компании ее использовать нельзя
вопрос такой: а в яндекс.облаке, где clickhouse подключен как одна из баз данных - нет возможности включить этот словарь? -
В Яндекс.Облаке тоже нет внутрияндексовской геобазы.
(если бы была - тогда можно было бы легко выгрузить её целиком) -
-
После пары последних обновлений заметил странный баг с вьюхами: запрос ко вьюхе (обычная, не матвью) отдает меньше данных, чем в исходной таблицы.
Схема такая:
1. исходная таблица (в mysql)
2. таблица с движком mysql (в КХ)
3. вьюха на таблицу (в КХ)
Запрос count для первых друх таблиц возвращает правильное значение, а к третьей - где-то процентов 10. Но стоит пересоздать вьюху - запрос с count ко вьюхе начинает отдавать правильное значение. И такое уже второй раз за день -
-
Это я ещё при 18.12.13 сначала включил, потом выключил. А сейчас оказывается по умолчанию включена. Спасибо, буду дальше копать
-
А точно обычная вьюха, а не матвью? А то поведение очень уж похоже на мержи. Сразу после создания еще ничего не помержилось, вот и отдается полностью, а потом по прошествии мержей остается 10 процентов данных.
-
Точно. Эта вьюха нужна чтобы запросы к таблице с mysql-движком не падали
-
да, странный баг, когда на марсе температура через 0 переходит, вьюхи начинают возвращать 10% строк.
и вроде исправлен https://github.com/yandex/ClickHouse/commit/13779bc75d85a3f52299c4df34a741208ebf4cf7 -
-
ну мы вообще стандартные конфиги не изменяем, все свое складываем в clickhouse/conf.d
https://clickhouse.yandex/docs/en/operations/configuration_files/ -
Воооо, юзеры. То что нужно. Спасибо!!
- 19 September 2018 (260 messages)
-
Доброго утра! Нет ли штатной функции отображения seconds(UintX) в формате HH:MM:SS? Я знаю что типа time нет в CH
-
меньше суток наверное можно выкрутиться
SELECT substring(toString(toDateTime(36000)), 12, 8 )
10:00:00
SELECT substring(toString(toDateTime(3600)), 12, 8 )
01:00:00 -
select 360001 s, intDiv(s, 3600) h, intDiv(s-3600*h, 60) m, s-3600*h-m*60 ss
┌──────s─┬───h─┬─m─┬─ss─┐
│ 360001 │ 100 │ 0 │ 1 │
└────────┴─────┴───┴────┘ -
Joined.
-
если я правильно понял - скоро должно быть )
https://github.com/yandex/ClickHouse/pull/2770#issuecomment-422466974 -
А что такое "геобаза" ?
-
-
обычно база данных, в которой ip связан с герлокацией
-
-
-
-
именно так
-
-
-
так вот это не очень критично
все-равно оно никогда не дает 100% попадания (всегда есть мобильные операторы/vpn'ы и т.п.), всегда важнее срез "в общем"
можно и свою наколхозить, есть вендоры конечно. но то как устроена яндексовая (иерархично, с областями) - для СНГ идеально -
Смотря где, если мы продали трафик как трафик с США, то он потом не долже внезапно светиться как трафик с Канады
-
Там простой формат, легко сделать, она там вообще к IP не привязана
-
я чё-то про аналог OSM подумал
-
-
я понимаю что иерархия не связана с IP
можно конечно этим заниматься, это муторно и долго. и все время будет расхождение с тем трафиком который люди покупают (к примеру в яндекс.директе, с геотаргетингом) и тем что мы показываем
хотелось хоть с одним крупным вендором (яндекс/google/вк) совпадать (хотя-бы по набору регионов)
просто подумалось что может быть в Яндекс.Облаке есть подключенный словарь который не дают наружу
потом уже после ответа Алексея стало понятно что да, если бы был - можно бы было получить и саму базу -
Привет всем! Мы тут на клике решили считать воронку, но вопрос не про неё. Упрощённо у нас есть таблица, содержащая колонки (uid, date, event), мы группируем по uid и с помощью groupArray получаем две колонки (uid, [event1,event2,event3]), далее делаем расчёты. Чтобы не группировать при каждом запросе, решили сгруппировать единожды и положить в отдельную таблицу. Но когда делаем запросы к заранее сгруппированной таблице, то вылетает по лимиту памяти, тогда как тот же самый запрос с группировкой в памяти отрабатывает на отлично. Вроде бы делаем то же самое, даже выбросили лишний шаг.. С чем может быть связано такое поведение?
-
а потом что именно вы с этими массивами делаете?
-
на всякий случай про то как считать воронки в ClickHouse: https://www.youtube.com/watch?v=YpurT78U2qA
-
Дальше делается полнейшая жесть с arrayFilter, чтобы найти индексы ивентов входа в воронку (их может быть несколько), arrayJoin, чтобы размножить последовательность шагов на отдельные записи на каждый вход в воронку, и в итоге arraySlice, чтобы оставить в каждой записи только одно прохождение. Но эта жесть с группировкой в памяти отрабатывает и скорее вопрос, в чём принципиальная разница, группировать в памяти или брать из заранее сгруппированной таблицы..
-
Ага, это видела. По сути на основе этого и делается, там просто не простая воронка, поэтому появляется всякая жесть))
-
для отладки удобнее из таблицы, как мне кажется
-
Мне тоже так кажется) Но запросы из таблицы вылетают по памяти и пока не понятно, почему..
-
А какой движок таблицы и настройки? И как выбираете из таблицы (по сравнению с прямым селектом)? (Например не используете ли повторно GROUP BY?)
-
т.е. я так понимаю что делаете что-то типа
CREATE TABLE ... Engine=... AS SELECT uid, groupArray(event) FROM (SELECT uid, event FROM table ORDER BY date) GROUP BY uid ? -
А потом простой селект (без дополнительных группировок) из получившейся таблицы?
-
Вроде бы не должно "отваливаться"...
-
Движок MergeTree. Какие настройки интересуют?
Запросы различаются лишь секцией from - либо таблица, в которой уже сгруппированные данные, либо запрос из исходной таблицы и группировка (ровно то, чем заполнена сгруппированная таблица). -
Почти, только groupArray(event) вместо просто event
-
Да, никаких доп группировок, но своё слово вносит arrayJoin, я думаю. Так что не такой уж простой)
-
Ну если он может "размножить" строки читая данные из памяти, то по идее должен справиться с тем же самым читая те же данные из таблицы.
-
А если вы в том селекте где используете данные записанные в таблицу замените прямое использование таблицы на подзапрос типа FROM (SELECT * FROM table) ?
-
Попробовала только что - тот же результат.
Кстати, по памяти вылетает достаточно быстро, прогресс бар в клиенте замирает на 2% и через 4 секунды выкидывает ошибку. Может он заранее пытается прикинуть нужный размер и падает из-за некоторого вычисленного значения? Потому что просто сделать какой-нибудь каунт из сгруппированной таблицы можно, не отрабатывают сложные запросы с arrayJoin и arraySlice. -
объём используемой памяти видно в логах сервера
-
Привет всем! Возник вопрос про механизм обновление кластера. Есть кластер из 25 машин. Кластер находится под нагрузкой. Могу ли я обновлять ноды одна за другой без простоя кластера? Тоесть будет ли работать кластер с нодами разной версии, не возникнит ли конфликт. Или необходимо выполнять остановку всех нод, обновлять, а потом продолжать работу. Если есть мануал по данному вопросу скинте ссылочку, а то я както не нашел
-
Интересненько, MemoryTracker из логов: группировка в памяти 2.15 GiB, чтение из заранее сгруппированной таблицы остановилось на 8.05 GiB (упёрлось в лимит). Значит, это реально не какое-то вычисленное значение..
-
Code: 159, e.displayText() = DB::Exception: Timeout exceeded: elapsed 5.079963156 seconds, maximum: 5, e.what() = DB::Exception
как то обойти можно? а то не пересортировать -
-
Joined.
-
да я через tabix.io пока
-
о есть такая
-
А можете попробовать сделать какой-то воспроизводимый пример?
-
Что-нибудь похожее на ваши данные погенерить из numbers() и rand?
-
И какой-то минимальный пример?
-
-
на своем опыте - я сделал бесполезную функцию, Алексей ее сразу интегрировал ( до релиза прошло 2 недели или около того). За что огромное спасибо, так как не надо возиться со своей сборкой
-
-
да, небольшое обычно редко висит на ревью дольше единиц дней или недель, но на нетривиальные патчи может уходить непредсказуемо много времени в зависимости объема, сложности и качества кода
-
-
Попробую
-
скорее всего arrayJoin сильно увеличивает расход памяти
-
Но тот же самый запрос с тем же самым arrayJoin и группировкой в памяти, а не чтением из таблицы с заранее сгруппированными данными, отрабатывает с меньшим потреблением памяти и не падает.
-
Joined.
-
Привет, мне сказали, что тут есть люди, которые умеют селектить, а не как я.
-
есть пользователи, они иногда приходят. Есть retention недельный. Для дня Х мы хотим посчитать следующую чиселку: уники, который пришли в диапазоне (Х-2 недели, Х-неделя) и еще раз пришли в (Х-неделя,Х). Вроде всё просто
-
а теперь хочется селект, который для последний 14 дней будет выдавать эту чиселку
-
типа скользящим окном?
-
Это самых похожие слова, что я нашла в документации
-
Обновляю кластер по одной машине, обычно никаких проблем нет, надо тоже ченджлог читать на предмет совместимости
-
спасибо
-
Ребята, посоветуйте хорошие, полезные статьи по Catboost?
-
-
Могу предположить такой сценарий: у кх где-нибудь есть параметр - сколько записей читать одним блоком. Примем за 100. Приходит полный запрос, читает блок 100 записей, получает из них условно 10 строчек с массивами по 10. От них считает математику, кушая 100*0,2% доступной памяти. Параллельно ещё 3 процессора работают, всего 80% памяти съедено.
Ситуация 2. Приходит запрос на создание промежуточной таблицы. Берёт 100 записей, группирует, пишет 10 строчек с массивами по 10 за каждый обработанный блок. Приходит 2й запрос на сложную математику, читает 100 строчек, но теперь каждая строчка - это уже массив из 10 элементов. И в памяти такой блок занимает не 100*0,2%, а 1000*0,2%. ООМ.
пс. это всего лишь предположение, реального сценария не знаю. -
как-то можно сделать distributed join двух таблиц (с одинаковым ключом шардирования) как будто в режиме local?
select a,b from (select a from tableA where foo=bar all inner join (select b from tableB where x = y) using id) -
я помню, что можно было просто указывать имя локальной таблицы во вложенном запросе, но, кажется, это только если tableA == tableB
-
-
-
Настройки | Документация ClickHouse
Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
и что делать?
-
не знаю, дождаться ответа разработчиков или issue сделать, например
-
https://github.com/yandex/ClickHouse/issues/3173 - добавь пожалуйста свои данные может ускоритсяAttempt to attach to nullptr thread group when creating materalized view #3173
Error happens 2018.09.19 14:43:03.046468 [ 356 ] {3c0ea2eb-f069-41b4-900a-e907f5bc5917} executeQuery: Code: 49, e.displayText() = DB::Exception: There was an error on ch3: Code: 49, e.displayText() = DB::Exception: Attempt to attach to n...
-
SELECT user, countIf( date between today()-6 and today() ) as has_action_in_last_7_days, countIf( date between today()-13 and today()-7 ) as has_action_in_previous_7_days from table where date between today()-13 and today() group by user having has_action_in_last_7_days>1 and has_action_in_previous_7_days>1
-
В общем, не уверен, что правильно понял что тебе нужно, но кажется что-то типа того: https://gist.github.com/blinkov/a415e5c9d6dcc373a5eb1e1e37b34bd5foo.sql
GitHub Gist: instantly share code, notes, and snippets.
-
это вроде без усложнения из второго сообщения про то, что надо за 14 последних значений X это посчитать
-
угу. Такой сильно топорный вариант :)
-
Но понять просто
-
Кстати если данных не очень много то можно просто sequenceMatch написать https://clickhouse.yandex/docs/en/query_language/agg_functions/parametric_functions/#sequencematchpatterntime-cond1-cond2 или windowFunnel
-
Так да, за день я могу, мне надо график рисовать. Вот про окна очень не хватает какие-то примеров похожего толка. Но кажется, будет многовато, это ретеншн всего сервиса
-
Смотрю, спасибо!
-
Всем привет! Описываю конфиг внешнего словаря, там нужно указать null_value для атрибута. Какой валидный null_value для DateTime? Такой вариант падает с ошибкой:
<attribute>
<name>start_time</name>
<type>DateTime</type>
<null_value>NULL</null_value>
</attribute>
. -
select
a, b
from tableA
all inner join (
SELECT b
FROM tableB
) USING id
без установки d_p_m
Double-distributed IN/JOIN subqueries is denied (distributed_product_mode = 'deny’)
d_p_m=local
Table default.tableB_replicated doesn't exist., e.what() = DB::Exception
(потому что b_local в бд shard_0, а не в default)
d_p_m=allow
DB::Exception: Table shard_0.tableB doesn't exist.., e.what() = DB::Exception
(непонятно, почему)
d_p_m=global
работает -
вероятно, d_p_m не слишком хорошо дружит с перекрестной репликацией/шардингом? у кого-то есть опыт?
-
-
что-то странное вы делаете
что будет если джойнить с шардом tableB, зачем там дистрибьютид? по моему вы этого хотите
select a,b from (select a from tableA where foo=bar all inner join (select b from *tableB_SHARD* where x = y) using id) -
Joined.
-
а как это работает?
-
это же при dpm=local?
-
Всем доброго дня. На многих вебинарах встречаю фразу, что нельзя в клик сваливать джисонки и растаскивать их по вьюхам, но нигде не нашел объяснения почему. Может кто-то знает или даст ссылку почитать?
-
dpm тут вообще ни к селу кмк, это полиси.
-
-
потому что КХ парсит свой формат json и на очень базовом уровне, например нельзя лишние проблелы
-
это сделано для скорости, там нет нормального парсера, потому что это будет очень тормозить, json плохой формат.
-
а что тогда это значит?
>tableB_SHARD
есть бд default c tableA/tableB, которые смотрят на tableA_replicated/tableB_replicated на разных машинах, как можно шард указать? -
Не совсем понял. Если у меня в клике запись json = {"id":1, "var1": "value", "var2":"value"}, то ее же можно разобрать через visitParamExtractUInt(json,'id'). То есть тут вопрос не столько в формате, сколько в скорости? То есть хочу понять в какой момент проблемы всплывут
-
Disk sdb read requests merge per second -
подскажите, что физически означает эта метрика?: -
ну вот то и значит, что в КХ это не json
вот раз
select visitParamExtractString('{"id": "1", "var1": "value", "var2":"value"}', 'id')
вот два
select visitParamExtractString('{"id":"1", "var1": "value", "var2":"value"}', 'id') -
-
-
-
Привет, коллеги. Такой вопрос. Сопоставима ли скорость кликхаус memory движок со скоростью чтения тем же редисом?
-
-
Самая тут большая проблема в том, что для того чтоб достать вам эту строку он прочитает еще кучу которые рядом и хранить в КХ что-то не фиксированной длины (плюс/минус) - это сильно не оправдано. Ну и о том что JSON поддерживается достаточно базово уже сказали
-
Кстати о памяти. Вот у меня статистика по объёму занятой памяти на серверах за неделю:
-
Вот как мне посмотреть, что там происходит до того, как сервер click2 упадёт по oom?
-
select a,b from (select a from tableA where foo=bar all inner join (select b from tableB_replicated where x = y) using id)
-
Вот и у меня аналогичный вопрос, потому как всякие system.processes и system.merges я уже просуммировал - не сходится даже приблизительно
-
Аналогично, причём на click2 в момент проверки работало два запроса: insert от telegraf на том же сервере и мой.
-
Я правильно понимаю логику работы клика? У меня есть таблица, куда валятся джисонки, и отдельно материалайзд вью которая "распарсивает" таблицу. Каждый раз, когда будет прилетать джисонка новая, КХ, чтобы добавить новые данные во вьюху, будет доставать ближайшие Н-тысяч джисонок и распарсивать их?
-
вряд ли кто-то измерял.
-
нет, не будут, парсится будет вставляемый блок, сами json-ы можно вообще не хранить если сделать саму таблицу с engine=Null
-
Мы сейчас делаем так: из таблицы с движком mySQL выбираем в таблицу с движком Memory пачку событий (у нас такая, довольно примитивная, очередь), распарсивая при этом json данные события. И уже из таблицы с распарсенными данными, запросами INSERT INTO ... SELECT ... раскладываем куда надо. Проблем с json пока не было, видимо у нас подходящий для Clickhouse формат :)
-
на мержи и словари может легко, смотрится в соотвествующих system. таблицах
плюс кеш марков, плюс кеш распакованных -
добрый день
тупой вопрос
есть инструмент, который показывает в реалтайме обновление таблицы c данными? -
clickhouse-client + SQL + watch ?
-
@Vasyaabr @den_crane @kshvakov спасибо!
-
@borys_yermokhin https://t.me/clickhouse_ru/66275Kirill Shvakov in ClickHouse не тормозит
clickhouse-client + SQL + watch ?
-
вопрос не мой, поэтому я тегнул автора, за ответ спасибо :D
-
Оказалось, что в запросах потерян ордеринг по дате, с ним и первый запрос падает по памяти:) Без ордеринга такие запросы не имеют смысла, но просто чтобы воспроизвести ситуацию, сделала совсем простой вариант - без ордера и только с одним типом ивентов. На нём можно увидеть, что есть разница по памяти. https://gist.github.com/svpetrova/b82880ceeba395d0ffa26356d78bd84bClickExample
ClickExample. GitHub Gist: instantly share code, notes, and snippets.
-
А как себя поведет КХ если я вставляю блок данных из разных партиций, но ДО лимита в 1 млн строк (что бы данные одним блоком отправились с клиента) и вот возникла ошибка во время вставки, либо вставка была прервана, то данные запишутся частично или нет? Просто у меня сейчас подозрение, что если данные из разных партиций, то он частично пишет данные. Т.е. я отправляю запрос на инсерт большого куска данных ДО 1 млн строк и у меня как-то каждую секунду увеличивается количество строк в таблице (пишу в один поток).
-
словари не используются, в мержах мало
-
-
-
Хотя по идее оно должно вставить разом, т.е. пишу 500 000 строк из 10 партиций, то оно по окончанию вставки должно сразу показать + 500 000 строк, а не кусочками?
-
Да, но если insert INTO T SELECT ... то пишет не по 1кк
-
Не, мы через clickhouse-client пишем данные
-
Типа cat file | clickhouse-client -q 'insert into ...'
-
Из моего опыта - по памяти сортировку лучше делать внутри каждый группы отдельно. Примерно так:
WITH
groupArray( tuple(value,time) ) as val_time_tuples,
arraySort( x -> x.2, val_time_tuples ) as val_time_tuples_sorted,
arrayMap( t -> t.1, indexes) as time_sorted_vals, -
-
Надо вот тут покопаться https://github.com/yandex/ClickHouse/blob/db13ef96d62ce739c3e666deaa042c9bfda61b1a/dbms/programs/client/Client.cpp#L960 (insert_format_max_block_size - по дефолту 1048576, но есть подозрение что он не будет его копить, а будет чаще блоки скидывать)yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data. Contribute to yandex/ClickHouse development by creating an account on GitHub.
-
не запишутся полностью (точнее у меня записываются на проде при out of memory, но воспроизвести на стейдже и оформить баг я не смог и скорее всего это моя очень специфичная проблема)
-
Просто у нас трабл. Мы ставим клиенту настройку с размером блока в кол-во строк которое хотим записать. Улетает команда на запись данных и я по несколько раз в секунду делаю select count() from table и вижу как кол-во строк меняется.
-
Причем постоянно
-
Пока ещё нет, но выглядит знакомо. Скорее всего будет несложно исправить.
-
Я думаю, что это связано с наличием в таблице "толстых" строк (длинных массивов) и достаточно большим index_granularity по-умолчанию. Наверное стоит указать в таблице с временными данными поменьше index_granularity. Например, 64.
-
Всем привет. Есть какая-то альтернатива aioch ( постлянно выхватываю ошибку https://github.com/mymarilyn/aioch/issues/2), кроме aiohttp клиента ?Error on socket shutdown: [Errno 107] Transport endpoint is not connected · Issue #2 · mymarilyn/aioch
GCP - 24 CPU, 32 RAM. Semaphore - just 4 Query is fast enough Script starts running well but after some time I start getting this error: Error on socket shutdown: [Errno 107] Transport endpoint is ...
-
Коллеги, есть кластер два шарда по две реплики. Шардирование и репликация через zookeeper. Страшен ли clickhous`у split brain реплик в каждом шарде в случае когда данные льются постоянно на обе реплики, а связь между репликами оборвалась?
Или после восстановления связи просто все безболезнено синхронизируется?
Есть ли у zookeeper`а какие-то общие данные, которые могут поломаться в таком случае? -
типа видно незакончившийся insert ? что-то значит неправильно сделано у вас, у вас точно один insert ?
create table p(a Int64, b Int64) engine=MergeTree partition by a%2 order by tuple();
insert into p select number,throwIf(number=999998) from numbers(1000000);
select * from p;
0 rows in set. Elapsed: 0.001 sec. -
Вот судя по всем примерам и тестам есть подозрение, что у нас где-то есть зомби процессы
-
<null_value>0000-00-00 00:00:00</null_value>
-
Спасибо!
-
Если оборвалась связь между репликами, то они синхронизируются после восстановления.
Если оборвалась связь с ЗуКипером, то таблицы перейдут в режим read_only -
Попробуйте уменьшить max_block_size для этого селекта. В том примере который вы прислали - при уменьшении до 1024 использование памяти при чтении из таблицы ниже чем в первом примере. Кстати там этот rand() который вы используете в примере - "не совсем" случаен :)
-
В КХ если агрументы функции отсуствуют или = константе, то функция вычисляется один раз.
-
Поэтому rand умеет принимать агрументы :)
-
Too large array size while reading from ZooKeeper
такое вываливается на старте и сервер останавливается
нужно ноду дропать руками? -
Это полностью Ок. Split brain - штатная ситуация. Сначала обе реплики будут содержать неполные данные, потом нальют недостающие данные друг с друга. Если какая-то реплика не видит по сети кворума zookeeper нод, то на неё не получится вставлять данные.
-
Спасибо
-
Пачка данных разобъётся на несколько по количеству партиций. Вставка будет атомарной не для всей пачки, а только для отдельных кусочков.
-
Нужно вручную удалить часть нод. Скорее всего из директории log для таблицы, в которой есть заброшенная реплика.
-
это вообще неиспользуемая таблица, в нее писали последний раз месяца два назад
-
непонятно, почему началось какое-то движение там
-
zk ls:
WatchedEvent state:SyncConnected type:None path:null
2018-09-19 14:42:43,714 [myid:] - WARN [main-SendThread(localhost:2181):ClientCnxn$SendThread@1168] - Session 0xc004dc897660047 for server localhost/127.0.0.1:2181, unexpected error, closing socket connection and attempting reconnect
java.io.IOException: Packet len18875288 is out of range!
at org.apache.zookeeper.ClientCnxnSocket.readLength(ClientCnxnSocket.java:113)
at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:79)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:366)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1145)
WATCHER::
WatchedEvent state:Disconnected type:None path:null
Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /clickhouse/tables/0/table_foo_replicated/log
at org.apache.zookeeper.KeeperException.create(KeeperException.java:102)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1541)
at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1569)
at org.apache.zookeeper.ZooKeeperMain.processZKCmd(ZooKeeperMain.java:732)
at org.apache.zookeeper.ZooKeeperMain.processCmd(ZooKeeperMain.java:600)
at org.apache.zookeeper.ZooKeeperMain.run(ZooKeeperMain.java:363)
at org.apache.zookeeper.ZooKeeperMain.main(ZooKeeperMain.java:291) -
Вот это - проблемная нода: /clickhouse/tables/0/table_foo_replicated/log
У ней накопилось слишком много детей, потому что у таблицы table_foo_replicated есть заброшенная реплика.
> это вообще неиспользуемая таблица, в нее писали последний раз месяца два назад
Не могу ничего сказать. Лог обновляется только при записи в таблицу. -
а почему тогда
create table p(a Int64, b Int64) engine=MergeTree partition by a%103 order by tuple();
insert into p select number,throwIf(number=999998) from numbers(1000000);
select count() from p;
0 rows in set. Elapsed: 0.001 sec.
потому что insert select и select обламывается? -
Эх :( спасибо! Будем думать как быть
-
Если используете Replicated таблицу, то после ошибки, следует просто повторить весь батч.
-
Не, обычная таблица (
-
а что значит “заброшенная”? если я просто выведу машину из кластера, этого недостаточно?
-
Думаю, что да. После SELECT блоки сначала склеиваются до max_insert_block_size. До этого момента есть исключение. В результате ничего не вставляется. До разбиения блоков по партициям, дело не доходит.
-
Да, раньше было недостаточно. Потому что, если сервер исчез - наверное он может подняться. И случай, когда сервер исчез навсегда, от этого не отличается. В ZooKeeper остаётся запись о реплике, и для реплики накапливаются логи.
Недавно сделали доработку на эту тему: https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md#%D0%A3%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-1
И теперь проблем с заброшенными репликами нет :) -
Привет! Можете подсказать merge() и union слишком различаются по производительности? При union'е распараллеливается запрос или нет?
-
И тот и другой распараллеливаются.
Для маленького числа (несколько) таблиц разницы либо не будет, либо UNION ALL будет быстрее. Для большого количества таблиц лучше merge. -
Спасибо!
-
Спасибо, действительно, с уменьшенным max_block_size работает! И за пример с WITH и сортировкой массива большое спасибо!))
-
-
-
Joined.
-
Дак она есть давно вроде бы
-
В Changelog-ах нет
-
Там как правило много чего нет
-
-
-
-
Уточните чего у вас нет? Уже давно естсь такое
CREATE TABLE users ( _id String, username Strin) ENGINE = MySQL('localhost:3306', 'admin_stat', 'users', 'root', '')
И делать селекты из users как из обычной КХ таблицы -
-
Релиз ClickHouse 1.1.54337, 2018-01-18
Добавлены табличные функции mysql и odbc и соответствующие движки таблиц MySQL, ODBC для обращения к удалённым базам данных. Функциональность в состоянии "бета".
select * from system.table_functions where lower(name) like '%mysql%' -
-
Так это из changelog'а же фраза
-
Ок, тогда такой вопрос. Использую табличную функцию mysql и получаю
SELECT *
FROM mysql('url:port', 'dbname', 'tablename', 'user', 'password')
Received exception from server (version 18.10.54405):
Code: 90. DB::Exception: Received from URL, IP DB::Exception: Empty list of columns passed.
0 rows in set. Elapsed: 0.080 sec.
Что за лист колонок? В доках https://clickhouse.yandex/docs/ru/single/#mysql_1 про это ничего не сказано. -
Всем привет, появилась проблема при запросах с табличной функцией odbc
Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 239145. Bytes expected: 67905586., e.what() = DB::Exception
Пробывал на MSSQL, PostgreSQL. Вроде началось после 18.12.17, никто не сталкивался? -
-
-
-
Коллеги, подскажите, как правильно, задать последовательность ключей при создании MergeTree.
Есть три потенциальные колонки для ключа со следующими кардиналитити (кол-во уникальных значений/ общее кол-во строк):
col1 - 0.001
col2 - 0.005
col3 - 0.010
Как правильнее будет сделать для большинства кейсов (в запросах могут присутсвовать все ключи или только некоторые с равной вероятностью).
1. (col1, col2, col3) так?
2. (col3, col2, col1) или так? -
как правильно оживлять таблицы, для которых пропали данные в зк?
-
А по перфомансу string и fixed string сильно разные?
-
И еще e num)
-
https://www.youtube.com/watch?v=rqf-ILRgBdY Тут хорошо рассказывали.
-
-
А можно подробностей -- конфиг драйверов, сам запрос?
-
-
-
-
Может быть это тайм-аут сети/http клиента? Не самого кликхауса?
-
-
-
В доках про него ничего нет, но видимо он аналогичен движку MySql, я правильно понимаю?
-
-
Joined.
-
1 будет скорее всего будет лучше жаться и скорее всего будет лучше справляться с поиском по частичному ключу.
В общем случае после ключей с высоким кардиналити добавлять что-то ещё обычно довольно бессмысленно. -
-
Тут в документации есть про выбор PK: https://clickhouse.yandex/docs/ru/operations/table_engines/mergetree/#_5
-
А уже появилась возможность создавать пользовательские кастомные функции (udf user define function) ?
Или весь странный кастом выносить в апп слой, например если нужна алгебра на OpenCl GPU -
Через таблицу работает
-
-
Нет и не предвидится. Довольно легко можно дописать что-то своё до кода КХ если можете C++. Если это что-то нужное не только вам - можно сделать пулл реквест и добавить функцию к основному коду. Ещё как вариант (оч. медленный) можно внешнюю логику подцепить как словарь (http/executable), и тогда можно в чем угодно ее написать.
-
хорошо было бы хотя бы сделать вычисления лямбды над arrays
-
Ну arrayMap вроде как уже давным-давно есть ? https://clickhouse.yandex/docs/en/query_language/functions/higher_order_functions/
-
да, но в нем нельзя использовать контекст текущий. Например нельзя написать функцию, которая будет считать среднее геометрическое ( как выражение)
-
Да, наверное что-то типа arrayMapWithAccumulator или arrayInplaceModify могли бы порой быть полезны .
-
+1
-
Ну вообще говоря можно. Через логарифмы в суммы перевести. Есть еще arrayReduce — но она недоделана. Вот ее бы доделать
-
Мы недавно начали использовать версию 18.14.12 вместо 1.1.54388 на 1/3 кластера и заметили увеличенное количество ошибок вида
Memory limit (total) exceeded: would use 30.00 GiB (attempt to allocate chunk of 2097152 bytes), maximum: 30.00 GiB
когда мы вставляем в ClickHouse
Подскажите пожалуйста, в новой версии или в предыдущей - могло ли измениться значительно потребление памяти или другая причина почему мы ловим такие ошибки?
Ошибки видны только на 1/3 кластера где новая версия, старые 2/3 кластера нету таких ошибок
@milovidov_an @kochetovnicolai -
а у этого на текуший момент какой статус?
https://github.com/yandex/ClickHouse/issues/520
вот этот совет отсюда (https://groups.google.com/forum/#!topic/clickhouse/uq9891JyV7M) все еще актуален? кх 12.14
Write <background_pool_size>4</background_pool_size> at /profiles/default in users.xml file and restart the server.Recovery after data loss doesn't work with more than 2 replicas per shard · Issue #520 · yandex/ClickHouseThis is a bit vague report, but we had an issue when one node was put back to production after a disk failure and couldn't recover from peer replicas. What happened was we put the node back...
-
что-то сегодня у меня одни сплошные проблемы, и я все транслирую сюда)
-
-
Total - потребление оперативки в сумме всеми запросами. Посмотрите также, есть ли изменение в количестве одновременно выполняющихся запросов.
-
-
На 10 GB сети, репликация может использовать несколько соединений и из-за этого существенно тормозить диски. Это актуально, но возникает далеко не всегда (должно совпасть несколько условий). Если вы подтверждаете все проблемы - что у вас 10 GBit сеть, что диски перегружены, и что репликация использует слишком много соединений (метрики ReplicatedFetch и ReplicatedSend в system.metrics), при этом версия ClickHouse достаточно свежая, то стоит уменьшить background_pool_size.
-
Самый простой - если выгружаются метрики (в конфиге, секция graphite). Если нет - можно и через query_log. Сейчас напишу...
-
The allocator has been replaced: jemalloc is now used instead of tcmalloc. In some scenarios, this increases speed up to 20%. However, there are queries that have slowed by up to 20%. Memory consumption has been reduced by approximately 10% in some scenarios, with improved stability. With highly competitive loads, CPU usage in userspace and in system shows just a slight increase. #2773
Могло ли это повлиять отрицательно на размер потребляемой памяти? -
-
Это не может повлиять на величину отслеживаемой потребляемой памяти, так как она не зависит от аллокатора. Может повлиять на RSS, который содержит также куски памяти, которые алокатор кэширует, а не отдаёт системе (оставляет в "куче"). В остальном, jemalloc чуть-чуть менее прожорлив, чем tcmalloc.
-
-
select query_start_time + arrayJoin(range(toUInt64(ceil(query_duration_ms / 1000)))) AS time, count() FROM system.query_log WHERE event_time >= '2015-07-31 11:14:00' AND event_time < '2015-07-31 11:16:00' AND event_date = '2015-07-31' AND type IN (2, 4) GROUP BY time ORDER BY time
-
нет, у меня 1GB-сеть и не загружен диск, просто #520 - единственный баг, который ищется по DB::Exception: Cannot write to ostream at offset N
-
причем они (оффсеты) повторяются периодически
-
и background_pool_size выставил в 4, ничего не поменялось
-
У вас другая проблема.
-
-
Посмотрите в SHOW PROCESSLIST. Правда ли, что в сумме потребление оперативки достигает 30 GB? Или это враньё из-за неправильного подсчёта, на который недавно жаловались?