我正在尝试在一个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": [
"..."
]
}
这给出了一行longsum为all row_counts的行,就好像groupBy列是null一样。
我的用法是否正确,或者这是Druid中的一个已知问题。文档说虚拟列可以像普通维度一样使用,但对于如何甚至缺少工作示例并不是很清楚。
谢谢!Phani
发布于 2020-08-07 13:04:34
最新编辑...
还有一些人深入研究,发现问题出在虚拟列上缺少"outputType“属性。奇怪的是,聚合器能够自动检测时间并正确计算长和,即使group by结果是错误的。
"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": [
"..."
]
}
https://stackoverflow.com/questions/63280959
复制相似问题