我正在尝试在 Druid 原生查询中创建一个 groupby 虚拟列,看起来像这样......
{
"queryType": "groupBy",
"dataSource": "trace_info",
"granularity": "none",
"virtualColumns": [
{
"type": "expression",
"name": "tenant",
"expression": "replace(array_offset(tags, array_offset_of(tagNames, 'tenant')), 'tenant:', '')"
},
{
"type": "expression",
"name": "rc",
"expression": "replace(array_offset(tags, array_offset_of(tagNames, 'row_count')), 'row_count:', '')"
}
],
"dimensions": [
"tenant"
],
"aggregations": [
{
"type": "longSum",
"name": "trc",
"fieldName": "rc"
}
],
...
...
...
"intervals": [
"..."
]
}
这给出了一行,其中包含所有 row_counts 的 longsum,就好像 groupBy 列为空一样。
我的用法是否正确,或者这是 Druid 中的一个已知问题。文档说虚拟列可以像普通维度一样使用,但并不清楚如何使用,甚至缺少一个工作示例。
谢谢! 帕尼
最佳答案
最新编辑...
进一步挖掘发现问题出在虚拟列上缺少“outputType”属性。奇怪,因为聚合器能够自动检测时间并正确计算长和,即使按结果分组是错误的。
"virtualColumns": [
{
"type": "expression",
"name": "tenant",
"expression": "replace(array_offset(tags, array_offset_of(tagNames, 'tenant')), 'tenant:', '')",
"outputType": "STRING"
},
{
"type": "expression",
"name": "rc",
"expression": "replace(array_offset(tags, array_offset_of(tagNames, 'row_count')), 'row_count:', '')"
"outputType": "LONG"
}
],
见上文(下面可能是解决该问题的一种非高效方法)。
经过一些试验和错误后,我有一个使用提取维度的解决方法。虽然不确定,但我怀疑这是 Druid 0.18.1 中的一个临时问题。希望 VC 上的分组在未来的版本中会像宣传的那样工作。
{
"queryType": "groupBy",
"dataSource": "trace_info",
"granularity": "none",
"virtualColumns": [
{
"type": "expression",
"name": "tenant",
"expression": "replace(array_offset(tags, array_offset_of(tagNames, 'tenant')), 'tenant:', '')"
},
{
"type": "expression",
"name": "rc",
"expression": "replace(array_offset(tags, array_offset_of(tagNames, 'row_count')), 'row_count:', '')"
}
],
"dimensions": [
{
"type": "extraction",
"dimension": "tenant",
"outputName": "t",
"extractionFn": {
"type" : "substring", "index" : 1
}
}
],
"aggregations": [
{
"type": "longSum",
"name": "trc",
"fieldName": "rc"
}
],
...
...
...
"intervals": [
"..."
]
}
关于group-by - Apache Druid GroupBy 虚拟列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63280959/