Является ли агрегация (число) по измерению, но не по показателям, поддерживаемым Druid?
Например, есть два измерения: [страна, веб-сайт] и одна метрика: [PV].
Я хочу знать средний PV сайта для каждой страны.
Чтобы сделать это, легко получить общее количество PV в каждой стране, однако трудно получить количество веб-сайтов в каждой стране, кроме того, ожидаемый результат - это общее количество PV(в каждой стране), разделенное на количество веб-сайтов (в каждой стране). страна).
Что я могу сделать, так это применить запрос groupBy по стране и веб-сайту, как показано ниже, а затем сгруппировать результат по стране за пределами моего приложения. Это очень, очень, очень медленно, потому что запрос извлекает много данных из Друида, и большинство из них не имеет смысла просто за сумму.
{
"queryType": "groupBy",
"dataSource": "--",
"dimensions": [
"country",
"website"
],
"granularity": "all",
"intervals": [
"--"
],
"aggregations": [
{
"type": "longSum",
"name": "PV",
"fieldName": "PV"
}
]
}
Кто-нибудь может помочь с этим? Мне интересно, что такой общий запрос не поддерживается друидом.
Заранее спасибо.
Чтобы было ясно, я опишу ожидаемый результат с помощью SQL. Если вы знаете, что я хочу делать или не знакомы с SQL, пожалуйста, игнорируйте следующую часть.
SELECT country, sum(a.PV_all) / count(a.website) as PV_AVG FROM
(SELECT country, website, SUM(PV) as PV_all FROM DB GROUP BY country, website ) a
GROUP BY country
1 ответ
Вы пытались использовать вложенный запрос groupBy? друид поддерживает это. В двух словах вы можете иметь что-то вроде
{
"queryType": "groupBy",
"dataSource":{
"type": "query",
"query": {
"queryType": "groupBy",
"dataSource": "yourDataSource",
"granularity": "--",
"dimensions": ["country", "website"],
"aggregations": [
{
"type": "longSum",
"name": "PV",
"fieldName": "PV"
}
],
"intervals": [ "2012-01-01T00:00:00.000/2020-01-03T00:00:00.000" ]
}
},
"granularity": "all",
"dimensions": ["country"],
"aggregations": [
----
],
"intervals": [ "2012-01-01T00:00:00.000/2020-01-03T00:00:00.000" ]
}