首页 文章

德鲁伊聚合函数

提问于
浏览
2

我正在使用德鲁伊创建用于生成报告的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 回答

  • 1

    您可以通过在timeseries查询中使用聚合来完成此操作 . 这不是你想要的吗?

  • 0

    您可以使用聚合和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"
      }
    }
    
  • 2

    Druid中的聚合只能用于聚合查询,如timeseries,topN和groupBy .

    如果您只是将列中的值与时间进行聚合,则最简单的方法是编写时间序列查询 .

    例如,

    {
      "queryType": "timeseries",
      "dataSource": "<datasource name>",
      "granularity": "day",
      "aggregations": [
        <Your aggregations here>
      ],
      "intervals": [ <Time interval (from/to)> ]
    }
    
  • 0

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

    后聚合是在德鲁伊出来的聚合值上应该进行的处理规范 . 如果您将后聚合作为查询的一部分包含在内,请确保包含后聚合器所需的所有聚合器

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

    "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" }
             ]
           }
    

相关问题