gpt4 book ai didi

druid - apache 德鲁伊中的总和(不同指标)

转载 作者:行者123 更新时间:2023-12-05 07:05:55 33 4
gpt4 key购买 nike

我们如何在德鲁伊中写 sum(distinct col) ?如果我尝试用德鲁伊编写,它说无法构建计划,但在德鲁伊中也是可能的。我尝试转换为子查询方法,但我的内部查询返回大量项目级数据,因此超时。

最佳答案

不同的计数或总和不是德鲁伊默认支持的东西。

实际上有几种方法可以得到类似的结果。

选项 1. Theta Sketch 扩展(推荐)

如果启用 Theta Sketch 扩展(参见 https://druid.apache.org/docs/latest/development/extensions-core/datasketches-theta.html),您可以使用它来获得相同的结果。

例子:

{
"queryType": "groupBy",
"dataSource": "hits",
"intervals": [
"2020-08-14T11:00:00.000Z/2020-08-14T12:00:00.000Z"
],
"dimensions": [],
"granularity": "all",
"aggregations": [
{
"type": "cardinality",
"name": "col",
"fields": [
{
"type": "default",
"dimension": "domain",
"outputType": "string",
"outputName": "domain"
}
],
"byRow": false,
"round": false
}
]
}

结果:

+--------+
| domain |
+--------+
| 22 |
+--------+

选项 2:基数

cardinality() 聚合计算一组 Apache Druid(孵化)维度的基数,使用 HyperLogLog 来估计基数。

例子:

{
"queryType": "groupBy",
"dataSource": "hits",
"intervals": [
"2020-08-14T11:00:00.000Z/2020-08-14T12:00:00.000Z"
],
"dimensions": [],
"granularity": "all",
"aggregations": [
{
"type": "cardinality",
"name": "domain",
"fields": [
{
"type": "default",
"dimension": "domain",
"outputType": "string",
"outputName": "domain"
}
],
"byRow": false,
"round": false
}
]
}

响应:

+-----------------+
| domain |
+-----------------+
| 22.119017166376 |
+-----------------+

选项 3. 使用 hyperUnique

此选项要求您在编制索引时跟踪计数。如果你已经应用了它,你可以在你的查询中使用它:

{
"queryType": "groupBy",
"dataSource": "hits",
"intervals": [
"2020-08-14T11:00:00.000Z/2020-08-14T12:00:00.000Z"
],
"dimensions": [],
"granularity": "all",
"aggregations": [
{
"type": "hyperUnique",
"name": "domain",
"fieldName": "domain",
"isInputHyperUnique": false,
"round": false
}
],
"context": {
"groupByStrategy": "v2"
}
}

因为我的数据集中没有 hyperUnique 指标,所以我没有确切的示例响应。

这个页面很好地解释了这个方法:https://blog.mshimul.com/getting-unique-counts-from-druid-using-hyperloglog/

结论

在我看来,Theta Sketch 扩展是获得结果的最佳和最简单的方法。请仔细阅读文档。

如果您是 PHP 用户,您可以看看这个,也许它会有所帮助:

关于druid - apache 德鲁伊中的总和(不同指标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62647980/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com