druid SQL查询-跨记录的多值字段明显计数



是否有一种方法可以在德鲁伊SQL中为多值字段的不同行中执行不同的计数,其中值仅在数组中计数一次?假设我有以下记录:

shippingSpeed 
[standard, standard, standard, ground]
[standard,ground]
[ground,ground]

预期结果:

standard 2
ground 3

我尝试了下面的查询,但它是在一个数组中聚合字段计数,然后给出所有记录的总数:

SELECT
"shippingSpeed", count(*)
FROM orders
WHERE __time >= CURRENT_TIMESTAMP - INTERVAL '30' DAY
GROUP BY 1
ORDER BY 2 ASC

结果:

standard 4
ground 4

这是因为多值列上的Group By将把数组UNNEST成多行。它正确地将每个项目计数为一个实例。

如果你想删除重复项,定义&;shippingspeed &;在摄入时具有以下性质:"multiValueHandling"SORTED_SET">

您可以在这里找到更多详细信息:https://druid.apache.org/docs/latest/querying/multi-value-dimensions.html#overview

你可以使用一些未公开的函数

SELECT
array_set_add(MV_TO_ARRAY("shippingSpeed",null) , count(*)
FROM orders
WHERE __time >= CURRENT_TIMESTAMP - INTERVAL '30' DAY
GROUP BY 1
ORDER BY 2 ASC

MV_TO_ARRAY -> converts the multi value col to an array

array_set_add -> creates a set out of the arrays. Since we donot have 2 arrays, second argument is null.

但是@sergio说的可能是最简单的选择。

最新更新