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

Filtering results from ClickHouse using values from dictionaries

我对ClickHouse有点陌生,还在摸索着学习。对此有疑问。

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

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

听起来您正在寻找 ODBC table 函数。 ClickHouse 有一堆 table 函数,它们像 Postgres foreign table 一样工作。该设置类似于字典,但您获得了传统的 JOIN 行为。它目前没有出现在官方文档中。你可以参考这个 https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/test_odbc_interaction/test.py#L84 。并且在不久的将来(今年),ClickHouse将支持标准的JOIN语句。

字典基本上会先替换值。据我了解,您的字典将基于您的用户 table.

这是一个例子。希望我理解你的问题。

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

这是对我们数据库的真实查询,所以如果您有任何需要 try/confirm 让我知道