Фильтрация результатов из ClickHouse по значениям из словарей - PullRequest
0 голосов
/ 14 октября 2018

Я немного незнаком с ClickHouse и до сих пор изучаю его методом проб и ошибок.Есть вопрос об этом.

Говоря о звездной схеме представления данных, с измерениями и фактами.В настоящее время я храню все в PostgreSQL, но OLAP-запросы с агрегациями начинают показывать неправильное время, поэтому я собираюсь переместить некоторые таблицы фактов в ClickHouse.Первоначальные тесты CH показывают невероятную производительность, однако в реальной жизни запросы должны включать в себя соединения с таблицами измерений из PostgreSQL.Я знаю, что могу соединить их как словари.

Вопрос: Я обнаружил, что, используя словари, я могу делать запросы, подобные левым соединениям в старой доброй СУБД, то есть значения из набора результатов можно объединять с соответствующими значениями из словаря.Но могут ли они быть отфильтрованы по некоторым ограничениям на словарные ключи (как в INNER JOIN)?Например, в PostgreSQL у меня есть таблица users (id, name, ...), а в ClickHouse у меня есть таблица visits (user_id, source, medium, session_time, timestamp, ...) с показателями их посещений сайта.Могу ли я сделать запрос к CH, чтобы получить агрегированные метрики (количество ежедневных посещений для данного диапазона дат) пользователей, которым name соответствует какое-то условие (например, LIKE "EVE%")?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Словарь в основном заменит значение первым.Насколько я понимаю, ваш словарь будет основан на вашей таблице пользователей.

Вот пример.Надеюсь, я понимаю ваш вопрос.

select dictGetString('accountidmap', 'domain', tuple(toString(account_id))) AS domain, sum(session) as sessions from session_distributed where date = '2018-10-15' and like(domain, '%cats%') group by domain

Это реальный запрос к нашей базе данных, поэтому, если вы хотите что-то попробовать / подтвердить, дайте мне знать

0 голосов
/ 15 октября 2018

Похоже, что табличная функция ODBC - это то, что вы ищете.У ClickHouse есть множество табличных функций, которые работают как внешние таблицы Postgres.Настройка похожа на словари, но вы получаете традиционное поведение JOIN.В настоящее время он не отображается в официальном документе.Вы можете обратиться к этому https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/test_odbc_interaction/test.py#L84.И в ближайшем будущем (в этом году) ClickHouse получит поддержку стандартного оператора JOIN.

...