2016-04-29 17 views
1

Ich benutze Druid, um eine Benutzeroberfläche zum Generieren von Berichten zu erstellen. Für das Scripting, verwende ich die folgenden Codes:Druid-Aggregatfunktionen

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

Ich brauche zwei weitere Felder:

Total Conversions = pvconversions+pcconversions 
CTR = Clicks/Impressions 

Ich habe nicht die Lage, etwas zu diesem Thema zu finden, wie sie zu schreiben. Kann jemand helfen. in Zeitreihen Abfrage

Dank

Antwort

1

Sie können es tun, indem Aggregat mit. Ist das nicht wonach Sie suchen?

+0

Yep! Danke :) –

+0

Hier ist der Link, wenn Sie suchen, was hilfreich sein wird - http://druid.io/docs/latest/querying/aggregations.html – thunderbird

0

Sie müssen Post-Aggregate in der Abfrage verwenden. Aus der Dokumentation von Druid

Post-Aggregationen sind Spezifikationen der Verarbeitung, die auf aggregierten Werten geschehen soll, als sie aus Druid kommen. Wenn Sie einen Beitrag Aggregation als Teil einer Abfrage enthalten, stellen Sie sicher, dass alle Aggregatoren sind die Post-Aggregator erfordert

Zum Beispiel CTR zu berechnen ist hier der Beitrag Aggregat: "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" } ] }

0

Ihr Problem sein kann mit Aggregationen und postAggregations lösen wie dies unter Schnipsel:

{ 
    "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" 
    } 
} 
0

Aggregationen in Druide können mit Aggregationsanfragen wie Zeitreihen, Erste N und groupBy nur verwendet werden.

Wenn Sie Werte in einer Spalte nur gegen die Zeit aggregieren, besteht die einfachste Möglichkeit darin, eine Zeitreihenabfrage zu schreiben.

Zum Beispiel

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