【问题标题】:Filtering results from ClickHouse using values from dictionaries使用字典中的值过滤来自 ClickHouse 的结果
【发布时间】:2019-03-18 20:25:15
【问题描述】:

我对 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%")的用户的聚合指标(给定日期范围内的每日访问次数)吗?

【问题讨论】:

    标签: olap clickhouse


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      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
      

      这是对我们数据库的真实查询,所以如果您有什么想尝试/确认的,请告诉我

      【讨论】:

      • 您能提供更多详细信息吗?据我了解,session_distributed 是 ClickHouse 表,accountidmap 是 PG 的? dictGetString 是什么?
      • accountidmap 是字典名称。 dictGetString 是 clickhouse 函数访问字典 ifself 并执行查找。 accountidmap 让我可以将帐户 ID 交换为有关帐户的各种信息,而无需进行任何昂贵的连接。我曾经加入的几张表都可以用字典代替,
      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2018-06-14
      • 2018-07-26
      • 1970-01-01
      • 2020-02-19
      相关资源
      最近更新 更多