借助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中是否有与此相关的功能?有一种解决方法或方法吗?
(注意:我的用例不是真正的“人”,我不在乎它是否适用于字符串或任何其他类型:-)
答案 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