【问题标题】:ClickHouse: is there a way to do arrayJoin( DictGetArray( ...) )ClickHouse:有没有办法做 arrayJoin(DictGetArray(...))
【发布时间】:2018-10-17 16:23:26
【问题描述】:

使用 ClickHouse,我可以对多值维度进行分析。使用arrayJoin 函数很容易做到这一点。例如:

SELECT arrayJoin(places) AS place, count() FROM hits GROUP BY place

现在让我们进入字典。我将字段personId 存储为一列,并使用字典将personId 映射到该人的(名字)名称。如果想按名称计算点击次数,我所要做的就是:

SELECT dictGetString('persons', 'name', personId) AS name, count() 
FROM hits GROUP BY name

我的具体用例是有多个(名字)名字的人。我想结合arrayJoin 和字典。我想象的代码如下:

SELECT arrayJoin(dictGetStringArray('persons', 'names', personId)) AS name, count() 
FROM hits GROUP BY name

dictGetStringArray 似乎不存在。而且无论如何我不知道如何映射到字典中的数组。

ClickHouse 中是否有与此相关的功能?有没有一种解决方法或方法可以做到这一点?

(注意:我的用例并不是真正的“人”,我不在乎它是否适用于字符串或任何其他类型 :-)

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    看看数组连接子句。我想你会找到你的解决方案——比如:

    SELECT person_id, count
    FROM hits
    ARRAY JOIN persons AS person_id, 
        arrayMap(lambda(tuple(x), dictGetString('persons', 'names', x)), persons) as name
    GROUP BY name
    

    这个想法是将 dictGetString 应用于数组的每个成员。以上内容基于以下文档。抱歉无法复制,因为我不知道如何在 clickhouse 中使用字典!

    在此处查看文档 - 祝你好运:

    https://clickhouse.yandex/docs/en/query_language/select/#array-join-clause

    【讨论】:

    • 问题是函数dictGetStringArray不存在。
    • 对不起,我打算输入 dictGetString - 现在编辑它。
    猜你喜欢
    • 2021-06-26
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2019-10-22
    • 2018-10-27
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多