使用字典中的值过滤ClickHouse的结果

时间:2018-10-14 03:39:54

标签: olap clickhouse

我对ClickHouse有点陌生,仍然通过反复试验研究它。有一个问题。

谈论数据表示的星型方案,包括维度和事实。目前,我将所有内容保留在PostgreSQL中,但是带有聚合的OLAP查询开始显示时机不好,因此我将一些事实表移至ClickHouse。 CH的初始测试显示出令人难以置信的性能,但是,在现实生活中,查询应包括对PostgreSQL维度表的联接。我知道我可以将它们连接为字典。

问题:我发现使用字典可以在良好的旧RDBMS中发出类似于LEFT JOIN的请求,即可以将结果集中的值与字典中的相应值结合起来。但是,是否可以通过对字典键的某些限制来过滤它们(例如INNER JOIN)?例如,在PostgreSQL中,我有一个表users (id, name, ...),在ClickHouse中,我有一个表visits (user_id, source, medium, session_time, timestamp, ...),其中包含有关他们对该网站访问的度量。我可以查询CH来获取name符合某些条件(例如LIKE "EVE%")的用户的汇总指标(给定日期范围内的每日访问量)吗?

2 个答案:

答案 0 :(得分:2)

听起来您正在寻找ODBC表功能。 ClickHouse有许多表函数,它们的功能类似于Postgres外部表。该设置类似于“字典”,但是您获得了传统的JOIN行为。当前它没有出现在正式文档中。您可以参考此https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/test_odbc_interaction/test.py#L84。在不久的将来(今年),ClickHouse将支持标准的JOIN语句。

答案 1 :(得分:1)

字典基本上将首先替换该值。据我了解,您的字典将基于您的用户表。

这里是一个例子。希望我能理解您的问题。

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

这是对我们数据库的真实查询,因此如果您想尝试/确认某些事情,请告诉我