
Константин
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

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 млн
- размер таблицы постоянно увеличивается, хоть и не очень быстро

Yuran
12.02.2018
21:26:47

Kirill
12.02.2018
23:14:14


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: Проблема решилась, виновато было ядро и глюки сетевой карты в результате. Со свежим ядром всё заработало прекрасно.

Alexey
13.02.2018
05:38:06

Артемий
13.02.2018
05:45:06

Tima
13.02.2018
05:46:47

Артемий
13.02.2018
05:47:17

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

Артемий
13.02.2018
05:50:31

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

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
И что нужно сделать, чтоб напороться?