【问题标题】:Post aggregation example query for druid in jsonjson中德鲁伊的后聚合示例查询
【发布时间】:2020-09-17 05:13:47
【问题描述】:

我正在尝试使用后聚合。我使用聚合来计算与给定过滤器匹配的行数。以下是聚合后查询:

{
  "queryType": "groupBy",
  "dataSource": "datasrc1",
  "intervals": ["2020-09-16T21:15/2020-09-16T22:30"],
  "pagingSpec":{ "threshold":100},
  "dimensions": ["city", "zip_code", "country"],
  "filter": {
    "fields": [
      {
        "type": "selector",
        "dimension": "bankId",
        "value": "<bank id>"
      }
    ]
  },
  "granularity": "all",
  "aggregations": [
    { "type": "count", "name": "row"}
  ],
  "postAggregations": [
    { "type": "arithmetic",
      "name": "sum_rows",
      "fn": "+",
      "fields": [
        { "type": "fieldAccess", "fieldName": "row" }
      ]
    }
  ]
}

如果我删除后聚合部分,它会返回如下结果:

[ {
  "version" : "v1",
  "timestamp" : "2020-09-16T21:15:00.000Z",
  "event" : {
    "city": "Sunnyvale",
    "zip_code": "94085",
    "country": "US",
    "row" : 1
  }
}, {
  "version" : "v1",
  "timestamp" : "2020-09-16T21:15:00.000Z",
  "event" : {
    "city": "Sunnyvale",
    "zip_code": "94080",
    "country": "US",
    "row" : 1
  }
}

如果我添加后聚合部分,我会得到解析器异常:

{
  "error" : "Unknown exception",
  "errorMessage" : "Instantiation of [simple type, class io.druid.query.aggregation.post.ArithmeticPostAggregator] value failed: Illegal number of fields[
%s], must be > 1 (through reference chain: java.util.ArrayList[0])",
  "errorClass" : "com.fasterxml.jackson.databind.JsonMappingException",
  "host" : null
}

我想在聚合查询的响应中添加所有行(列“行”);并将输出放在“sum_rows”中。

我不明白我在 post_aggregations 中缺少什么。任何帮助表示赞赏。

【问题讨论】:

    标签: druid


    【解决方案1】:

    承认我大部分时间都花在 SQL API 上,而不是原生 API (!!),但我认为你的问题是你只为你的帖子聚合器提供一个字段。请参阅以下示例:

    https://druid.apache.org/docs/latest/querying/post-aggregations.html#example-usage

    如果您需要行总和,也许您需要一个普通的聚合器来汇总行数?

    【讨论】:

      【解决方案2】:

      错误消息说ArithmeticPostAggregator 需要2 个参数;示例代码只有一个。在这个答案的底部有一个这个帖子聚合器的例子。

      但是...示例查询没有多个数字聚合来执行算术聚合后。也许目标是将两个输出行“合并”为一个?

      ...要将两行结果更改为仅具有总行数的结果(对于与查询过滤器和间隔匹配的所有数据库记录),从维度列表中删除 zip_code 是一种方法。

      dimensions 中删除zip_code 会产生如下结果:

      [
       {
        "version" : "v1",
        "timestamp" : "2020-09-16T21:15:00.000Z",
        "event" : {
          "city": "Sunnyvale",
          "country": "US",
          "row" : 2
        }
      ]
      

      如您所见,通过使用aggregations 提交groupBy 查询,Druid 将动态地为您执行此聚合(基于查询运行时数据库中的维度值),而无需后期聚合。

      算术后聚合器示例:

      {
        "type": "arithmetic",
        "name": "my_output_sum",
        "fn": "+",
        "fields": [
          {"fieldName": "input_addend_1", "type":"fieldAccess"},
          {"fieldName": "input_addend_2", "type":"fieldAccess"}
        ]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多