
Александр
20.02.2018
05:52:20
Просто неудобно такие стряпать - да
Мы просто написали билдер запросов с fluent подобным интерфейсом

Stas
20.02.2018
05:53:13
Так я наоборот хочу что бы добрее было - сделать 1 единый запрос, более универсальный, сейчас это около 100 маленьких запросов поддержка которых ад

Google

Александр
20.02.2018
05:55:39

Stas
20.02.2018
05:55:51

Александр
20.02.2018
05:56:31
https://github.com/the-tinderbox/ClickhouseBuilder

Stas
20.02.2018
05:57:31

Александр
20.02.2018
05:57:43
Да, без морды )

Stas
20.02.2018
05:57:54
Эх, жаль :)

Александр
20.02.2018
05:58:27
Ну, морду всегда напилить можно :)

Stas
20.02.2018
06:01:24

Tima
20.02.2018
06:08:42
Т.е. для одной строки получалось десяток значений, с разным колвом колонок и значениц. Чуть позже могу скинуть пример

Stas
20.02.2018
06:10:46

Tima
20.02.2018
06:14:56

Гаврилов
20.02.2018
06:43:53

Google

Stas
20.02.2018
06:45:17

Kirill
20.02.2018
06:45:26

Гаврилов
20.02.2018
06:45:53
сейчас мне приходится формировать файл tsv через copy и посылать post запросом

Kirill
20.02.2018
06:46:10
Чем не решение

Гаврилов
20.02.2018
06:46:27
copy требует суперюзера

Stas
20.02.2018
06:47:09
вот кусок кода с примером как ходить в mysql https://github.com/yandex/ClickHouse/blob/798299ba8934aeee8e1106e457062fc13df41b40/dbms/src/TableFunctions/TableFunctionMySQL.h

Гаврилов
20.02.2018
06:48:09
этого в 0.1.36 еще нету?
а стоп 0.1.36 это от jdbc драйвера версия
блин
у меня 1.1.54342 стоит

Kirill
20.02.2018
06:55:47

Гаврилов
20.02.2018
06:56:59
админы могут отжать такие права
госконтора все дела
мы чтобы пакет поставить на сервер пишем заявку и неделю ждем)

Stas
20.02.2018
06:58:23
и внутри виртуалки уже крутите что хотите

Гаврилов
20.02.2018
06:58:50
есть еще дба)
вот они просто пойдут и суперюзера отберут

Kirill
20.02.2018
07:01:13
Если есть ДБА то я бы тоже разработчиков в базу не пускал) На самом деле это просто задача по которой именно с ними вы и должны проконсультироваться как её лучше сделать, а не городить костыли

Гаврилов
20.02.2018
07:06:51
есть дба в компании с которыми можно договорится, а есть дба которых нанял заказчик

Google

Гаврилов
20.02.2018
07:07:00
которые вообще хз кто и где

Kirill
20.02.2018
07:11:14
Ну, сделайте хранимку и дайте прав только на нее и наплевать кто её запускает

Гаврилов
20.02.2018
07:14:48
я просто думал, что как раз copy и отправка через post это костыль

Kirill
20.02.2018
07:17:30
Исходите их того, что у КХ 2-а стандартных интерфейса ввода/вывода: http, нативный протокол поверх tcp + есть Kafka Engine для возможности напрямую читать с Kafka

Гаврилов
20.02.2018
07:18:41
я планирую сделать 2-3 таблицы replacedmergetable + штук 10 join + гдето 20-30 внешних словарей

Kirill
20.02.2018
07:24:53
Штук 10 join для КХ звучит как угроза)

Гаврилов
20.02.2018
07:26:20
не, они будут по 1 использоватся

Ololo
20.02.2018
07:26:41
Привет всем. Как лучше всего поделить транзакционную модель и субъектную? Вот у меня есть куча транзакций, подгружаемых раз в 15 минут в кликхаус, есть отдельная БД, в которую из этих транзакций складывается инфа о субъектах (кто, кому). Естественно, подразумеваются запросы в духе "все люди, заплатившие за период с X по Y больше N денег компании с айдишником A".
В кликхаусе данные ненормализованы, естественно. В субъектной базе до 4 НФ. Теперь мне нужно научиться быстро делать смежные выборки по двум БД. Первая мысль была класть транзакции в нормализованную БД тоже, в урезанном виде, но чего-то постгрес жрёт под это действо как не в себя. Может, кто сталкивался с чем-нибудь подобным, и нашёл более адекватное решение?

Гаврилов
20.02.2018
07:26:45
есть сущность, и есть у нее свойства

Slach
20.02.2018
07:28:31
стандатрый путь CH это Dictionaries и Arrays

Ololo
20.02.2018
07:50:22
Это платёжный шлюз. Я могу запихать услуги и провайдеров в dictionaries, но вот клиентов - точно нет. Кроме того, их нужно матчить по-хитрому. Допустим, у человека в одном сервисе есть email, в другом есть телефон, в третьем - телефон и email. В четвёртом - ИИН. В пятом - ИИН и email. В шестом - домашний адрес, в седьмом - домашний адрес и ИИН. Я должен знать, что это один человек (или близкая группа людей). Удобней всего, насколько я понимаю, такой матчинг в нормализованном data warehouse проводить. Но сами транзакции удобней хранить в clickhouse. Отсюда и вопрос.
Клиентов до матчинга между разными по сигнатуре услугами 8 миллионов примерно. После матчинга остаётся где-то 5. Кроме того, их каждые 15 минут становится больше. Поэтому, думаю, словарь тут не подходит. Если я ошибаюсь - поправьте, пожалуйста.


Slach
20.02.2018
07:57:47
ну да, словарь на 5 миллионов элементов в память грузиться... так что не подходит...
но и JOIN между таблицами по десятку миллионов тоже не путь CH

Александр
20.02.2018
08:00:39
йоу

Гаврилов
20.02.2018
08:01:27
я думал про array, но у меня может быть несколько связанных друг с дургом свойств
а так как с вложенными структурами плохо работает
то только join
в постгресе связь 1 ко многим с кучей таблиц
и в каждой таблице 1-10 свойств

Ololo
20.02.2018
08:07:22
в постгресе связь 1 ко многим с кучей таблиц
Звёздочка? Угу, сейчас так и делаю. Видимо, это единственный вариант. Оуке, спасибо. Тогда просто подумаю, можно ли записывать не все транзакции, или по-максимуму выкинуть лишнюю инфу из них.

Google

Гаврилов
20.02.2018
08:08:51
у меня стоит шедулер который раз в секунду собирает все что пришло и отправляет в кликхаус
постгрес приводит все к нужному мне виду

Ololo
20.02.2018
08:12:34
А, стоп, это обратная моей схема. Я прогоняю сырые данные через clickhouse, и нормализую их перед загрузкой в postgres. Спасибо, подумаю как можно у себя такое применить.
В общем, теперь я вижу это так:
1) получаем сырые данные в CH
2) нормализуем, переливаем в PG
3) джойним, разворачиваем в аналитические таблицы, переливаем в другую БД в CH
Третий шаг не обязателен, нужен только в том случае, если сам postgres тупит в аналитике. Пожалуй, его можно сдвинуть в сторону data mart по стандартной схеме.
Я правильно всё понимаю?

Гаврилов
20.02.2018
08:25:43
а почему сырые именно в клихаус?
почему сырые в постргес не записать?

Ololo
20.02.2018
08:28:36
Ну, я просто следовал стандартной схеме, где operational data storage собирает данные со всех master data storage, и хранит их в ненормализованном виде. Поскольку CH лучше подходит для хранения ненормализованных данных, то его и взял. Плюс через полгода примерно мы займёмся сбором не только фактологической информации, но и поведенческой. По сути, логов. В этот момент времени, как я опасаюсь, информации станет слишком много для постгрешки.

Гаврилов
20.02.2018
08:28:59
монго?

Ololo
20.02.2018
08:29:34
Ну это уже зоопарк какой-то будет.

Гаврилов
20.02.2018
08:29:55
у нас сейчас постгрес mssql и кликхаус)
скоро еще будет или монго или кассандра
а куда без зоопарка?
для каждой задачи свое средство
универсальность враг производительности

Ololo
20.02.2018
08:31:25
Ну да. Но монго всё равно не очень подходит для хранения поведенческой информации. С этим лучше всего как раз столбцовые бд справляются, насколько я понимаю.

Гаврилов
20.02.2018
08:31:44
в монго можно писать вообще все что есть
а в постгрес записывать только то что надо

Vladimir
20.02.2018
08:31:52
Вот хорошее видео про зоопарк в почте России, и про КХ в нём
https://www.youtube.com/watch?v=6JwMho6UfK4

Alexsandr
20.02.2018
08:32:10
СloutchDB докучи, у вас много разных БД в прод.

Ololo
20.02.2018
08:34:19
А, по поводу шидулера, кстати. Есть ли какие-нибудь более-менее готовые штуки для этого типа задач? ETL по расписанию, то бишь. Если будет мониторинг какой-нибудь из коробки - вообще будет отлично. Пока что Celery использую. И понял, что, возможно, пишу велосипед.

Google

Гаврилов
20.02.2018
08:34:46
тоесть например фронтенд разработчики могут начать посылать какуето информацию, которую еще не зписываете в базу, она в монго накопится, и когда нужно будет просто достанете из монго
а в постгресе или кликхаусе нужно заранее поля создать
написать обработку

Ololo
20.02.2018
08:35:25
Sounds legit

Гаврилов
20.02.2018
08:35:36
у меня spring запускает
мне кажется для сбора поведенческой информации монго почти идеален

Slach
20.02.2018
08:55:10

Ololo
20.02.2018
08:56:03
Шпашиба

Dig
20.02.2018
09:03:50

Mike
20.02.2018
09:24:25

Gregory
20.02.2018
11:50:00
Приветствую! Подскажите, пожалуйста, самостоятельно найти ответа не получилось.
Можно ли каким-то способом использовать 2 разных limit-by ?
например
SELECT
day,
client,
domain,
count(*) as count
FROM table
ARRAY JOIN domain
GROUP BY
toDate(date) AS day,
client,
domain
ORDER BY
day ASC,
client ASC,
count DESC
LIMIT 2 BY
day,
client
LIMIT 10 BY
dayт.е. получить в итоге по 10 записей на day, а внутри по 2 записи на day, client. т.е. по 5 уникальным client на день

Гаврилов
20.02.2018
11:50:40
у меня не получилось
пытался в подзапрос запихнуть, но производительность падает очень сильно

Vsevolod
20.02.2018
11:52:42
а как использовать set таблицы?
where not tlds in (select domain from whitelisted) - не работает, говорит, что нет read для set не поддерживается
а просто not tlds in whitelisted вообще не о том

Гаврилов
20.02.2018
11:53:24
where not tlds in whitelisted