group-by - Apache Druid GroupBy 虚拟列

标签 group-by druid virtual-column

我正在尝试在 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/

相关文章:

sql - 按年和月选择总计数()组?

mysql - 在 MariaDB/MySql 的虚拟(计算)列中使用 UNIX_TIMESTAMP

oracle - 在虚拟列表达式中连接数字会引发 ORA-12899 : value too large for column

php - 直接从Mysql查询数据生成报告(使用groupby、count)

mysql - SQL 分组依据。不同城市的重复 latlng

mysql多group_concat顺序保存

hadoop - 来自Ambari的Superset内部服务器错误

德鲁伊查询从第三列获取 "latest"值

java - 在 Linux 中加载扩展时出现 NullPointerException