ClickHouse:有没有办法做arrayJoin(DictGetArray(...))

时间:2018-10-17 16:23:26

标签: clickhouse

借助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中是否有与此相关的功能?有一种解决方法或方法吗?

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

1 个答案:

答案 0 :(得分: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