clickhouse:有没有一种方法可以实现arrayjoin(dictgetarray(…))

zmeyuzjn  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(254)

使用clickhouse,我可以对多值维度进行分析。这是很容易做到的 arrayJoin 功能。例如:

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

现在让我们进入字典。我把田地储存起来 personId 作为列并使用字典进行Map 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` 似乎不存在。不管怎样,我不知道如何Map到字典中的数组。
clickhouse中是否有此功能?是否有一种解决方法或方法来做这件事?
(注意:我的用例不是真正的“persons”,我不关心它是否适用于字符串或任何其他类型:-)
yqlxgs2m

yqlxgs2m1#

看看array join子句。我想你会找到你的解决方案-比如:

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子句

相关问题