
Oleg
25.08.2017
18:22:45
Если его нельзя нативно построить (судя по всему нелья) буду применять ряд упрощений опираясь на предметную область
Кстати да, один из вариантов - разбить по типа security.
Колонки - имена полей, типизированные
Среди колонок добавить timestamp и resolution
Поддерживать будет не очень просто, не терпимо
как в такой схеме будет работать выборка по timestamp?

Google

Oleg
25.08.2017
18:25:25
select * from universe.corp_bond where security_id IN ('A', 'B', 'C') and timestamp between now() - '2 month' and now();
Вроде нормально должно быть....
Проблема лишь в том, что я писать по колонкам буду, раздельно

papa
25.08.2017
18:26:01
если будет в индексе, то должен быть range scan

Oleg
25.08.2017
18:26:14
Понял
Спасибо большое, буду экспериментировать!

papa
25.08.2017
18:26:56
у вас в разные моменты времени приходят разные поля ?

Oleg
25.08.2017
18:27:14
clickhouse тут будет работать как персистентный кеш
Прилетел запрос на расчет исторического NAV (net asset value), для его расчета нужно разгрузить, допустим, 15 полей за указанный диапозон времени
Проверяем, каких данных не хватает, недостающие - грузим
Такая странная исторяи потому, что data provider деньги биллит по число запрошенных точек (!!!)
Не по числу запросов даже
А стоит это счастье несколько миллионов долларов в год

Google

Oleg
25.08.2017
18:28:46
Чем больше сохраним данных у себя и чем меньше будет с него грузить - тем больше сэконоими

papa
25.08.2017
18:29:07
точек четырехмерного куба?

Oleg
25.08.2017
18:29:10
Потому у нас при выполнении запроса окажется, что данные кусочно непрерывно, и у каждой security и поля недостает какого-то своего куска
Ну, timeseries в общем случае
Потому разгрузка идет так: смотрит по данной security, filed_name что лежит в базе (date_from, date_to), нужно загрузить target_from, target_to, вычисляем недостающий интервал так, чтобы в таргет попасть и чтобы непрерывный кусок получился, грузим
Билят по числу запрошенных field'ов, диапозон дат я любой могу попросить, это не влиеят
Но каждый новый запрос данного филда на любой time range - плюс к чеку
Прошу прощения, наверное, я путанно объясняю..
В финансах вообще с данными очень сложно все, они стоят дорого, системы там - legacy сплошное, куча совершенно контринтуитивных ограничений

papa
25.08.2017
18:34:19
если вы запрашиваете не все поля сразу, т.е. для одного time, security_id вам надо сделать больше одной вставки, то все становится интереснее.


Oleg
25.08.2017
18:35:04
Там отдельная интересная задача - на сколько запросов побить исходный запрос, с одной стороны грузить и фильтровать лишние данные медленней, с другой стороны есть лимит на число одновременных запросов ?
И снаружи подбирает SLA нашей системы на время обработки запроса
Есть входной запрос, он просит кубик - множество security_id, множество полей, диапозон дат, указан resolution
Для каждого (security_id, field_name) смотрит, какие данные уже лежат в базе (они непрерывно всегда лежат, это стоит столько же, но сильно проще в разработке софта)
Из этого вычисляем недостающие интервалы
Для каждого (security_id, field_name) получаем диапазон (load_from, load_to)
Дальше это бьем на некоторое число запросов (в простейшем случае - база пустая - будет один запрос по всем этим данным), загрузили данные, сохранили
В сложном случае для части пар (security_id, field_name) у нас данные уже есть, а для другой части - данные есть частично
Информацию какие диапозоны для каждой пары грузились я храню сбоку
Потому что в данных есть дырки (выходные дни и прочее)
Большое спасибо за советы и наводящие вопросы, мне теперь этот материал нужно переварить и провести ряд экспериментов/бенчмарков


papa
25.08.2017
18:46:32
если я правильно понял особенности этого импорта, то по умолчанию вы получите обе вставленные строки, каждая со своим набором определенных полей, и хорошего способа слить их в одну, в которой проставлено их объединение, я не то чтобы вижу. для "длинной" таблицы, когда каждое поле живет в отдельной строке и каждое поле можно грузить не больше одного раза, еще наверно получится, для "широкой" нужна уникализация при чтении, т.е. final или group by по ключу, это бывает тяжело.

Oleg
25.08.2017
18:49:39
Нет, group by не нужен
Простите, я уже перегружен деталями, мне переварить нужно всё ?
Как переварю и поиграюсь - приду с более конкретными вопросами

Google

Konstantin
25.08.2017
22:39:42
всем привет! подскажите, пожалуйста, как можно проставить гео по ip? как должен выглядить запрос если в 1й таблице список ip а во второй начало/конец ip диапазона и страна?
мозг упорно выдает что то вроде:
SELECT
log.ip,
ipdb.geoname_id
FROM log
LEFT JOIN ipdb ON IPv4StringToNum(log.ip)>IPv4StringToNum(ipdb.network_start_ip) AND IPv4StringToNum(log.ip)<IPv4StringToNum(ipdb.network_last_ip)

Tima
26.08.2017
07:12:18

Konstantin
26.08.2017
08:06:06

Ilyas
26.08.2017
09:26:43
Не правильно, конечно, потому и не отрабатывает

Alisa
26.08.2017
09:26:58
очень нужно делать обновление метрик, это очень дорого или в принципе можно жить?

Александр
26.08.2017
09:34:43

Tima
26.08.2017
11:02:53

Konstantin
26.08.2017
15:18:09

Kirill
26.08.2017
20:20:58
Подскажите пожалуйста, возможно ли сделать выборку из system.numbers по условию, которое вычисляется в результате запроса? WHERE с этой таблицей не работает, а в LIMIT можно использовать только фиксированное число. Нужно извлечь диапазон чисел, границы которого зависят от результата запроса, и заранее не известны.

papa
26.08.2017
20:46:19
это вы все еще по часам график делаете?

Kirill
26.08.2017
20:49:00
я сделал его, но пришлось захардкодить максимальное количество часов, которое может быть, не очень красиво
хотелось бы извлекать из system.numbers только тот диапазон, что реально нужен

papa
26.08.2017
23:30:41
обычно количество часов зависит от диапазона дат отчета, т.е. известно к моменту построения запроса.

Kirill
27.08.2017
06:09:05
У меня как раз случай, когда нет) Выборка событий делается по условиям, независящим от даты, то есть начальная и конечная даты неизвестны заранее.
Ну я сейчас ставлю в LIMIT количество часов, прошедшее от самого первого события в базе до текущего момента (приходит из приложения), это по крайней мере дает гарантию, что при джойне точно ничего не потеряется.

Рулон
27.08.2017
09:47:15
А как можно написать такой селект? select * from T1 left join T2 on t1.x=t2.x and t1.y<>t2.y

artem
27.08.2017
09:53:44
Кто-нибудь производил выгрузку данных с Google Analytics на лету в кликхаус с преобразованием сэмплированных данных?
Добрый день)

Александр
27.08.2017
09:55:41
Всем привет.
Подскажите, кто знает, как в зукипере работает защита от вставки одинаковых батчей? Или где почитать об этом? У нас почему-то смогло вставиться два одинаковых батча.
Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоков данных одинакового размера, содержащих одни и те же строчки в одном и том же порядке), блок будет записан только один раз. Это сделано для того, чтобы в случае сбоя в сети, когда клиентское приложение не может понять, были ли данные записаны в БД, можно было просто повторить запрос INSERT. При этом не имеет значения, на какую реплику будут отправлены INSERT-ы с одинаковыми данными. То есть, обеспечивается идемпотентность INSERT-ов. Это работает только для последних 100 вставленных в таблицу блоков.

Google

Александр
27.08.2017
10:58:04
Похоже, у нас порядок был разный в строках

No name
27.08.2017
11:22:32
Приветствую, я новенький в КХ и не очень понимаю какой движок мне больше подойдет.
Задача хранить и отображать просмотры и клики по определенным элементам. На подобии Яндекс.Метрика. Еще есть порядка 20 доп параметров, по которым тоже в дальнейшем нужно будет делать выборки. У некоторых параметров значениями являются id, я так понимаю надо подключать словари в виде Mysql.
Подскажите какой движок лучше выбрать и как вставлять в такую таблицу.

Рулон
27.08.2017
12:20:09
Вставляю данные из 1 таблицы в другую через clcikhouse -clent скорость вставки 1 лям/с, мне кажется я уперся в какую то настройку и вставка может быть быстрее

No name
27.08.2017
18:13:33
помогите
я создал в файле users.xml вот такого пользователя
<web>
<password>some_pass</password>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</web>
Этот пользователь работает только на локальной машине.
Где в настройках указать, чтобы через этого пользователя могли подключаться с удаленных серверов?
всё, спасибо, нашел

Alexey
28.08.2017
07:31:50
Ребят, что-то в доке не нашел, а можно как-то ограничить ширину канала между репликами?

Александр
28.08.2017
07:55:37
Я думаю тут больше системные всякие шейперы подойдут. Можно вроде бы через тот же iptables нарулить шейпинг трафика.

Alexey
28.08.2017
09:34:55
Ну это да. Просто интересует нет ли искаробки в CH ограничения на ширину канала при работе реплик.
чтоб не костылять

Kirill
28.08.2017
09:37:03
из коробки нет

Тефтеля
28.08.2017
09:39:55
Всем привет
<macros incl="macros" optional="true"/>
данная строчка ищет какие файлы?

Alexey
28.08.2017
09:40:09

Тефтеля
28.08.2017
10:06:54
из тысячи человек никто не ответит?)

Алексей
28.08.2017
10:08:23
в файле конфига
<include_from>/etc/clickhouse-server/some_file.xml</include_from>
инклуды будут из этого файла.
там должна быть структура
<yandex>
<section_name>
</section_name>
</yandex>
где section_name из macros incl="section_name"

Тефтеля
28.08.2017
10:10:48

Anton
28.08.2017
10:29:28
Привет всем! Подскажите, в папке /var/lib/clickhouse/data/база/таблица/ вижу вот такую картинку
https://s.mail.ru/uBJv/v31d2NJ5z
И все это добро прилично весит, что это такое, как можно избавиться от этого?

Ilya
28.08.2017
10:30:00

Google

Ilya
28.08.2017
10:30:40

Anton
28.08.2017
10:33:02
пробовал OPTIMIZE TABLE
выполняется Status:200, но папки остаются

Ilya
28.08.2017
10:37:15

Vladislav
28.08.2017
10:38:21
Всем привет :) Никто не знает — clickhouse может в теории свалиться с OOM, если ему uncompressed cache проставить излишне большой... Или с кэшами всё ок и сам себе он ногу не прострелит? :)

Anton
28.08.2017
10:40:58
1 - у одной записи, остальные нули
а в system.parts в active какие значения?
OPTIMIZE TABLE test.test PARTITION 201708 FINAL - вот так помогло

Ilya
28.08.2017
10:45:55

Anton
28.08.2017
10:46:22
а где можно посмотреть через какое?

Anton
28.08.2017
10:48:52
добрый день, подскажите пожалуйста, как можно посчитать в таблице date,user_id число юзеров, которые каджый день заходят как минимум 1 раз в день на протяжение 3х дней

Ilya
28.08.2017
10:49:12

Anton
28.08.2017
10:49:20
просто 3х дневной давности еще хранятся и все это занимает прилично место на диске. До OPTIMIZE было 415 Мб, после 15 Мб

Vladislav
28.08.2017
10:49:52
@f4llou7 Та же проблема.
90 партов, из них 85 неактивных.