2

我正在使用 druid 创建用于生成报告的 UI。对于脚本,我使用以下代码:

        {
      "type" : "doubleSum",
      "name" : "impressions",
      "fieldName" : "impressions"
    },
    {
      "type" : "doubleSum",
      "name" : "clicks",
      "fieldName" : "clicks"
    },
    {
      "type" : "doubleSum",
      "name" : "pvconversions",
      "fieldName" : "pvconversions"
    },
    {
      "type" : "doubleSum",
      "name" : "pcconversions",
      "fieldName" : "pcconversions"
    }

我还需要两个字段:

Total Conversions = pvconversions+pcconversions
CTR = Clicks / Impressions

我还没有找到任何关于如何编写它们的问题。任何人都可以帮忙。

谢谢

4

4 回答 4

5

您的问题可以使用聚合和 postAggregations 来解决,如下所示:

{
  "queryType":"timeseries",
  "dataSource":"data",
  "granularity":"hour",
  "descending":"false",
  "aggregations":[
    {"type":"doubleSum", "name":"sum-pvconversions", "fieldName":"pvconversions"},
    {"type":"doubleSum", "name":"sum-pcconversions", "fieldName":"pcconversions"},
    {"type":"doubleSum", "name":"sum-clicks", "fieldName":"clicks"},
    {"type":"doubleSum", "name":"sum-impressions", "fieldName":"impressions"}
    ],
  "postAggregations":[
    {
      "type":"arithmetic",
      "name":"Conversions",
      "fn":"+",
      "fields":[
        {"type":"fieldAccess", "name":"postAgg-proceed", "fieldName":"sum-pvconversions"},
        {"type":"fieldAccess", "name":"postAgg-numbers", "fieldName":"sum-pcconversions"}
        ]
    },
    {
      "type":"arithmetic",
      "name":"CTR",
      "fn":"/",
      "fields":[
        {"type":"fieldAccess", "name":"postAgg-click", "fieldName":"sum-clicks"},
        {"type":"fieldAccess", "name":"postAgg-impression", "fieldName":"sum-impressions"}
        ]
    }
    ],
  "intervals":["2016-08-22T01/2016-08-29T03"],
  "context":{
    "skipEmptyBuckets":"true"
  }
}
于 2016-09-05T11:47:45.127 回答
1

您可以通过在时间序列查询中使用聚合来做到这一点。这不是你要找的吗?

于 2016-05-15T14:52:28.863 回答
0

Druid 中的聚合只能用于时间序列、topN 和 groupBy 等聚合查询。

如果您只是针对时间汇总列中的值,最简单的方法是编写时间序列查询。

例如,

{
  "queryType": "timeseries",
  "dataSource": "<datasource name>",
  "granularity": "day",
  "aggregations": [
    <Your aggregations here>
  ],
  "intervals": [ <Time interval (from/to)> ]
}
于 2018-01-24T09:34:19.380 回答
0

您必须在查询中使用帖子聚合。来自德鲁伊的文档

后聚合是处理规范,当它们来自 Druid 时,应该对聚合值进行处理。如果您将后聚合作为查询的一部分包含在内,请确保包含后聚合器所需的所有聚合器

例如计算点击率,这里是帖子聚合:

"postAggregations" : [{
     "type"   : "arithmetic",
     "name"   : "average",
     "fn"     : "*",
    "fields" : [
       { "type"   : "arithmetic",
         "name"   : "CTR",
         "fn"     : "/",
         "fields" : [
           { "type" : "fieldAccess", "name" : "clicks", "fieldName" : "clicks" },
           { "type" : "fieldAccess", "name" : "impressions", "fieldName" : "impressions" }
         ]
       }
于 2016-08-21T12:18:02.157 回答