@clickhouse_ru

Страница 419 из 723
Константин
12.02.2018
17:53:26
могу я предполагать, что это не синхронизированные данные?

хочу заметить, что на другой ноде в этих папках только increment.txt и папка tmp

Alexey
12.02.2018
17:55:27
Также можно включить синхронную запись: insert_distributed_sync = 1, она проще.

Google
Константин
12.02.2018
17:56:03
это в конфиге?

Alexey
12.02.2018
17:56:17
В users.xml, в profiles/default.

Константин
12.02.2018
17:56:49
там в папке 149534 bin файлов

Alexey
12.02.2018
17:57:13
Уберите в сторону все файлы нулевого размера.

Константин
12.02.2018
17:58:14
Уберите в сторону все файлы нулевого размера.
не вижу таких, все небольшого веса

меня вот что беспокоит, некоторые файлы датируются аж ноябрем прошлого года

если это данные которые не попали на другие нода, а просто ждут своей очереди

то это больщой прецедент, так как это новые данные для статистики

судя по всему у поврежденного файла индекс 55884

Alexey
12.02.2018
18:01:51
Константин
12.02.2018
18:01:56
у последнего 205541

если меня устраивает то кол-во данных, что есть на данный момент - могу ли я попросту удалить эти данные?

Alexey
12.02.2018
18:03:15
Да.

Google
Алексей
12.02.2018
18:10:55
господа а как правильнее всего писать строки с колонками без значений ? есть широкая таблица и часть значений в ней отсутствует. видимо мне нужны null ?

papa
12.02.2018
18:11:34
либо ноль и пустая строка, либо Nullable типы и null

Alexey
12.02.2018
18:11:53
Эффективнее использовать нули/пустые строки, а не NULL.

Алексей
12.02.2018
18:12:18
пустые строки это как ?

papa
12.02.2018
18:13:12
имеется в виду некоторое значение по умолчанию, которое символизирует отсутствие значений.

Алексей
12.02.2018
18:13:58
при учете того что 0 приемлимое значение а диапазон значений весь uint64 что лучше взять за дефолт ?

Alexey
12.02.2018
18:17:39
Тогда NULL.

Алексей
12.02.2018
18:17:57
а нулл хранится на диске будет ?

сейчас под каждую строчку делаем инсерт с указанием колонок

по возомжности группируя одинаковые

это довольно медленно. примерно 45к строк в секунду

Alexey
12.02.2018
18:18:53
Под каждую строчку не надо делать INSERT. Только пачками.

Алексей
12.02.2018
18:19:06
понятно пачками.

короч нужно делать один инсерт и указывать в нем null

таблица создавалась когда Null еще не было. сейчас ее надо както видоизменять чтобы вставлять с null ?

Alexey
12.02.2018
18:23:23
Да, можно проальтерить. Nullable физически хранится как два составляющих "столбца" - данные и маска NULL-ов. Вместо этого вы можете не использовать Nullable, а завести отдельный столбец типа has_x UInt8.

Алексей
12.02.2018
18:24:19
получается Null дороже по диску чем не Null ?

Alexey
12.02.2018
18:28:17
> Nullable физически хранится как два составляющих "столбца"

Yuran
12.02.2018
18:31:41
получается Null дороже по диску чем не Null ?
я не думаю, что сильно дороже, если дороже вообще, потому что в кликхаусе есть компрессия столбцов

Alexey
12.02.2018
18:32:08
я не думаю, что сильно дороже, если дороже вообще, потому что в кликхаусе есть компрессия столбцов
Да, после сжатия будет примерно одинаково. Но выполнение запроса дороже.

Google
Dmitry
12.02.2018
18:32:41
нам немного другое нужно

есть широкие таблицы

мы получаем результаты измерений с разными наборами колонок

сейчас приходится буферизовать каждый набор колонок независимо и периодически скидывать в базу

хотелось бы иметь возможность в формате TSV вместо колонки указать что-то типа \N

типа -- тут нет значения в этой строке, не вставляй его в базу

это не NULL

а просто пропуск аттрибута при записи

papa
12.02.2018
18:40:03
типа -- тут нет значения в этой строке, не вставляй его в базу
а как это сочетается с тем что таблица имеет прямоугольную форму?

Dmitry
12.02.2018
18:47:05
нет там никакой прямоугольной формы

просто много колонок

условно говоря - есть таблица метрик интерфейсов

там состояния, скорости на вход на выход, ошибки, ну и так далее

по части железа в настройках стоит собирать ошибки, по части - нет

разные комбинации параметров могут быть

papa
12.02.2018
18:49:41
хорошо. и как вы это делаете в любой другой базе

Dmitry
12.02.2018
18:50:34
мы это уже делаем в CH

Алексей
12.02.2018
18:50:45
insert into columns ... values ...

Dmitry
12.02.2018
18:50:58
собираем буферы по уникальным наборам полей

и сбрасываем их

Google
Алексей
12.02.2018
18:51:48
но это не очень батчится. иногда за 30 секунд в части таких наборов получается 10000строк а для другого набора колонок может оказаться их 2 строки. в результате общая скорость не оч.

Dmitry
12.02.2018
18:51:48
если можно было бы выравнивать и пропускать отсутсвующие значения - буферизация была бы эффективнее и количество вставок в таблицу было бы меньше

ну вот, скажем, скорости сибираются по 5M интерфейсов, а уровни оптического сигнала - по 10k

эти 10k попадут в отдельный батч

а если писателей несколько - еще и между ними размажутся

papa
12.02.2018
19:01:32
то есть вы хотите чтобы кликхаус вместо вас объединял несколько прямоугольных таблиц на входе в одну с общим набором колонок, которую уже можно вставлять?

Алексей
12.02.2018
19:02:55
вообще мы хотим поднять скорость вставки. а механизм такого вот объединения дырчатых колонок как вариант реализации ускорения, ага.

papa
12.02.2018
19:04:26
потому что вариант "нет значения - не вставляй его в базу" выглядит немного странно. неприменимость какого-то атрибута к конкретному туплу с некоторой точностью кодируется через null, этого в большинстве случаев достаточно. но кто-то его вставить таки должен, либо через дефолтное значение, либо если вы объединяете несколько разноформатных вставок на клиентской стороне, то через задание его явным образом в запросе.

Константин
12.02.2018
19:06:48
@milovidov_an спасибо! все нормализовалось, данные равномерно распределились по шардам

Артемий
12.02.2018
20:49:11
PRIMARY ключ в ClickHouse всё равно не позволяет по одной строчке получать нужные значения, для этого нужно загрузить целый блок, и ещё и другие колонки прочитать. Поэтому результат запроса и читается целиком в память при выполнении JOIN. Но ИМХО лучше использовать словари, чем JOIN-таблицы, потому что их нужно каждый раз наполнять при рестарте.
Конечно, меня бы устроило, если бы грузились по блокам. Но JOIN грузит всю таблицу в память. Это 2 ГБ данных. Даже если я делаю JOIN для одной записи. Словари хотел использовать вначале, однако для данной задачи не увидел их преимуществ, они ведь так же полностью хранятся в оперативной памяти? Какие преимущества у словарей перед JOIN-таблицами, если считать, что: - в таблице только ключ-значение - значений больше 100 млн - размер таблицы постоянно увеличивается, хоть и не очень быстро

Vasilij
13.02.2018
05:01:11
Не сталкивался ли кто-нибудь с такой проблемой: При относительно частых (1-2 с екунду) небольших batch insert-ах, отваливается zookeeper, с вот такой ошибкой: Feb 12 13:52:45 site2-deac-dwh-cas1 supervisord[22997]: zookeeper 2018-02-12 13:52:45,073 [myid:1] - ERROR [LearnerHandler-/10.100.20.22:57990:LearnerHandler@648] - Unexpected exception causing shutdown while sock still open Ну и конечно следующий insert в базу тоже валится (но это, как я понимаю, результат отсутствия зоокипера): ClickHouseDB\DatabaseException: Cannot allocate block number in ZooKeeper: zkutil::KeeperException: connection loss Затем всё поднимается и продолжает работать, но осадочек то остался :( Куда посмотреть? UPD: Проблема решилась, виновато было ядро и глюки сетевой карты в результате. Со свежим ядром всё заработало прекрасно.

Артемий
13.02.2018
05:45:06
А почему вы не хотите в join задать условия в where? Чтобы не вся таблица грузилась
Хочу, я не понимаю как это сделать. id без WHERE оределяется 1 к 1. Сейчас часть с JOIN выглядит так: >ANY INNER JOIN urls2 USING id

Артемий
13.02.2018
05:47:17
Tima
13.02.2018
05:48:14
Имеется в виду как я написал

Артемий
13.02.2018
05:50:31
Имеется в виду как я написал
Спасибо. >ANY INNER JOIN (SELECT id, url FROM urls2 WHERE id = url_id) USING id

Alexey
13.02.2018
05:50:44
Any inner join (select id, count() as shows from urls2 where day =today) using (id)

Google
Alexey
13.02.2018
05:51:23
Group by там еще забыл, но это на ваше усмотрение

Артемий
13.02.2018
05:56:26
Any inner join (select id, count() as shows from urls2 where day =today) using (id)
У меня только id (без приявязки к дате)

Имеется в виду как я написал
Как в подзапросе сделать условие на колонку из внешней таблицы? Это вообще возможно?

Vasilij
13.02.2018
06:07:36
Через словарь и getDict?

Артемий
13.02.2018
06:08:16
Если верить документации, то JOIN всегда грузится в память и не имеет доступа к внешней табилце: >В начале выполнения запроса, выполняется подзапрос, указанный после JOIN, и его результат сохраняется в память. Я хотел убедиться, что это действительно так и никак не обходится

Ph
13.02.2018
08:09:31
Коллеги, подскажите какой максимально размер таблицы в Кб(Мб,Гб & etc) в ClickHouse?

Stanislav
13.02.2018
08:10:42
И в столбцах

Если вообще есть такое ограничение в пределах UInt16

Ph
13.02.2018
08:12:03
речь не про количество столбцов

Stanislav
13.02.2018
08:12:56
Про них тоже неплохо бы...

Ph
13.02.2018
08:13:30
про количество столбцов гуглится

интересует какой максимальный размер таблицы в Мб в ClickHouse

Kirill
13.02.2018
08:14:53
На сколько диска хватит, дальше distributed и масштабироваться серверами

Stanislav
13.02.2018
08:15:13
Угу. Сообщение в списке рассылки полуторагодовой давности. С тех пор много версий поменялось.

Kirill
13.02.2018
08:16:29
Еще для индексов память нужна, тоже есть шанс напоротся, но тоже постараться надо

Stanislav
13.02.2018
08:16:53
И что нужно сделать, чтоб напороться?

Страница 419 из 723