Druid 大數據分析之查詢

一、Druid 查詢概述html

     上一節完成數據導入後,接下來說講Druid如何查詢及統計分析導入的數據。
    Druid的查詢是使用REST風格的HTTP請求查詢服務節點(Broker、Historical、Realtime),這些服務節點暴露REST查詢接口,客戶端發送Json對象請求查詢接口。通常狀況下,查詢服務接口發佈在Broker節點,基於Linux 的POST請求查詢以下所示: 
Java代碼   收藏代碼
  1. /** 
  2. * port: 查詢請求接口對應Broker,默認8082端口 
  3. * query_json_file: 查詢Json對象文件(配置) 
  4. */  
  5. curl -X POST '<queryable_host>:<port>/druid/v2/?pretty' -H 'Content-Type:application/json' -d @<query_json_file>  

 

二、Druid 查詢類型
     Druid在不一樣場景下,有不少的查詢類型。查詢是由各類JSON屬性和Druid有不一樣類型的不一樣場景下查詢組成。對於各類類型的查詢類型的配置能夠json屬性文件設置。Druid查詢類型,歸納一下爲3大類:
     1. 聚合查詢 - 時間序列查詢(Timeseries)、排名查詢(TopN)、分組查詢(GroupBy)
     2. 元數據查詢 - 時間範圍(Time Boundary) 、段元數據(Segment Metadata)、數據源(Datasource)
     3. Search查詢 - Search
     本節以聚合查詢爲主,其它查詢類型比較簡單,使用上相對比較少,暫不介紹。對聚合查詢類型下的3種查詢如何選擇進行一下概述:
     在可能的狀況下,咱們建議使用的時間序列和TopN查詢代替分組查詢,分組查詢是Druid最靈活的的查詢,可是性能最差。時間序列查詢是明顯快於GROUPBY查詢,由於聚合不須要分組尺寸。對於分組和排序在一個單一的維度,TopN查詢更優於GROUPBY。

 

2.1 Json查詢屬性
在講聚合查詢下的3種查詢類型以前,咱們須要對3種查詢類型共有的特別重要的Json屬性理解與熟悉,經常使用屬性如:queryType、dataSource、granularity、filter、aggregator等。

 

2.1.1 查詢類型(queryType)
對應聚合查詢下的3種類型值:timeseries、topN、groupBy
 
2.1.2 數據源(dataSource)
數據源,相似數據庫中表的概念,對應數據導入時Json配置屬性dataSource值

 

2.1.3 聚合粒度(granularity)
    粒度決定如何獲得數據塊在跨時間維度,或者如何獲得按小時,天,分鐘的彙總等。在配置查詢聚合粒度裏有三種配置方法:
     1. 簡單聚合粒度 - 支持字符串值有:all、none、second、minute、fifteen_minute、thirty_minute、hour、day、week、month、quarter、year
       (1) all - 將全部塊變成一塊
       (2) none - 不使用塊數據(它其實是使用最小索引的粒度,none意味着爲毫秒級的粒度);按時間序列化查詢時不建議使用none,由於全部的毫秒不存在,系統也將嘗試生成0值,這每每是不少。
     2. 時間段聚合粒度 - Druid指定一精確的持續時間(毫秒)和時間綴返回UTC(世界標準時間)。
     3. 經常使用時間段聚合粒度 - 與時間段聚合粒度差很少,可是經常使用時間指平時咱們經常使用時間段,如年、月、周、小時等。
    下面對3種聚合粒度配置舉例說明:

  

    簡單聚合粒度正則表達式

        查詢粒度比數據採集時配置的粒度小,則不合理,也無心義,因較小粒度(相比)者無索引數據;如
    查詢粒度小於採集時配置的查詢粒度時,則Druid的查詢結果與採集數據配置的查詢粒度結果同樣。數據庫

        假設咱們存儲在Druid的數據使用毫秒粒度獲取,數據以下:express

Java代碼   收藏代碼
  1. {"timestamp": "2013-08-31T01:02:33Z", "page": "AAA", "language" : "en"}  
  2. {"timestamp": "2013-09-01T01:02:33Z", "page": "BBB", "language" : "en"}  
  3. {"timestamp": "2013-09-02T23:32:45Z", "page": "CCC", "language" : "en"}  
  4. {"timestamp": "2013-09-03T03:32:45Z", "page": "DDD", "language" : "en"}  

       以"小時" 粒度提交一個groupby查詢,查詢配置以下:json

Java代碼   收藏代碼
  1. {  
  2.    "queryType":"groupBy",  
  3.    "dataSource":"dataSource",  
  4.    "granularity":"hour",  
  5.    "dimensions":[  
  6.       "language"  
  7.    ],  
  8.    "aggregations":[  
  9.       {  
  10.          "type":"count",  
  11.          "name":"count"  
  12.       }  
  13.    ],  
  14.    "intervals":[  
  15.       "2000-01-01T00:00Z/3000-01-01T00:00Z"  
  16.    ]  
  17. }  

      按小時粒度進行的groupby查詢結果中timestamp值精確到小時間,比小時粒度更小粒度值自動補填零,數組

以此類推按天查詢,則小時及小粒度補零。timestamp值爲UTCapp

Java代碼   收藏代碼
  1. [ {  
  2.   "version" : "v1",  
  3.   "timestamp" : "2013-08-31T01:00:00.000Z",  
  4.   "event" : {  
  5.     "count" : 1,  
  6.     "language" : "en"  
  7.   }  
  8. }, {  
  9.   "version" : "v1",  
  10.   "timestamp" : "2013-09-01T01:00:00.000Z",  
  11.   "event" : {  
  12.     "count" : 1,  
  13.     "language" : "en"  
  14.   }  
  15. }, {  
  16.   "version" : "v1",  
  17.   "timestamp" : "2013-09-02T23:00:00.000Z",  
  18.   "event" : {  
  19.     "count" : 1,  
  20.     "language" : "en"  
  21.   }  
  22. }, {  
  23.   "version" : "v1",  
  24.   "timestamp" : "2013-09-03T03:00:00.000Z",  
  25.   "event" : {  
  26.     "count" : 1,  
  27.     "language" : "en"  
  28.   }  
  29. } ]  

       若是指定查詢粒度爲 none,則返回結果與數據導入時設置粒度(queryGranularity屬性值)結果同樣,
    此處的導入粒度爲毫秒,結果以下:curl

Java代碼   收藏代碼
  1. [ {  
  2.   "version" : "v1",  
  3.   "timestamp" : "2013-08-31T01:02:33.000Z",  
  4.   "event" : {  
  5.     "count" : 1,  
  6.     "language" : "en"  
  7.   }  
  8. }, {  
  9.   "version" : "v1",  
  10.   "timestamp" : "2013-09-01T01:02:33.000Z",  
  11.   "event" : {  
  12.     "count" : 1,  
  13.     "language" : "en"  
  14.   }  
  15. }, {  
  16.   "version" : "v1",  
  17.   "timestamp" : "2013-09-02T23:32:45.000Z",  
  18.   "event" : {  
  19.     "count" : 1,  
  20.     "language" : "en"  
  21.   }  
  22. }, {  
  23.   "version" : "v1",  
  24.   "timestamp" : "2013-09-03T03:32:45.000Z",  
  25.   "event" : {  
  26.     "count" : 1,  
  27.     "language" : "en"  
  28.   }  
  29. } ]  

     若是指定查詢粒度爲 all,返回數組長度結果爲1,結果以下:ide

Java代碼   收藏代碼
  1. [ {  
  2.   "version" : "v1",  
  3.   "timestamp" : "2000-01-01T00:00:00.000Z",  
  4.   "event" : {  
  5.     "count" : 4,  
  6.     "language" : "en"  
  7.   }  
  8. } ]  

 

    時間段聚合粒度 函數

          指定一個精確時間持續時長(毫秒錶示)及時間綴,返回UTC時間;支持可選項屬性origin,不指定時 
     默認開始時間(1970-01-01T00:00:00Z)

 

Java代碼   收藏代碼
  1. /**持續時間段2小時,從1970-01-01T00:00:00Z開始*/  
  2. {"type": "duration", "duration": 7200000}  
Java代碼   收藏代碼
  1. /**持續時間1小時,從origin開始*/  
  2. {"type": "duration", "duration": 3600000, "origin": "2012-01-01T00:30:00Z"}  

       

    以上簡單聚合粒度的示例數據爲例,提交groupby查詢,持續時間段爲24小時,查詢配置以下:

 

Java代碼   收藏代碼
  1. {  
  2.    "queryType":"groupBy",  
  3.    "dataSource":"dataSource",  
  4.    "granularity":{"type": "duration", "duration": "86400000"},  
  5.    "dimensions":[  
  6.       "language"  
  7.    ],  
  8.    "aggregations":[  
  9.       {  
  10.          "type":"count",  
  11.          "name":"count"  
  12.       }  
  13.    ],  
  14.    "intervals":[  
  15.       "2000-01-01T00:00Z/3000-01-01T00:00Z"  
  16.    ]  
  17. }  

     查詢結果:

Java代碼   收藏代碼
  1. [ {  
  2.   "version" : "v1",  
  3.   "timestamp" : "2013-08-31T00:00:00.000Z",  
  4.   "event" : {  
  5.     "count" : 1,  
  6.     "language" : "en"  
  7.   }  
  8. }, {  
  9.   "version" : "v1",  
  10.   "timestamp" : "2013-09-01T00:00:00.000Z",  
  11.   "event" : {  
  12.     "count" : 1,  
  13.     "language" : "en"  
  14.   }  
  15. }, {  
  16.   "version" : "v1",  
  17.   "timestamp" : "2013-09-02T00:00:00.000Z",  
  18.   "event" : {  
  19.     "count" : 1,  
  20.     "language" : "en"  
  21.   }  
  22. }, {  
  23.   "version" : "v1",  
  24.   "timestamp" : "2013-09-03T00:00:00.000Z",  
  25.   "event" : {  
  26.     "count" : 1,  
  27.     "language" : "en"  
  28.   }  
  29. } ]  

    

    經常使用時間段聚合粒度

 

         略...

 

 

2.1.4 過濾(Filters)
一個Filter就是一個Json對象,用於過濾數據行過濾,相似SQL中的Where子句。過濾器類型有以下:Selector filte、Regular expression filter(正則表達式過濾)、Logical expression filters(AND、OR、NOT)、In filter、Bound filter、Search filter、JavaScript filter、Extraction filter

    示例簡單查看使用方式:

   

   查詢過濾(Selector filte)

           等價於:WHERE <dimension_string> = '<dimension_value_string>'

Java代碼   收藏代碼
  1. "filter": { "type": "selector", "dimension": <dimension_string>, "value": <dimension_value_string> }  

   

    正則表達過濾(Regular expression filter)

           與Selector filte差很少,只是這裏使用正則表達式,表達式爲標準的Java正則表達式規範

 

Java代碼   收藏代碼
  1. "filter": { "type": "regex", "dimension": <dimension_string>, "pattern": <pattern_string> }  

 

    邏緝表達過濾(Logical expression filters)

   

     AND

 

Java代碼   收藏代碼
  1. "filter": { "type": "and", "fields": [<filter>, <filter>, ...] }  
 

     OR

 

Java代碼   收藏代碼
  1. "filter": { "type": "or", "fields": [<filter>, <filter>, ...] }  

 

     NOT

 

Java代碼   收藏代碼
  1. "filter": { "type": "not", "field": <filter> }  
 

 

    IN過濾(In filter)

       

    SQL查詢

 

Java代碼   收藏代碼
  1. SELECT COUNT(*) AS 'Count' FROM `table` WHERE `outlaw` IN ('Good', 'Bad', 'Ugly')  
    Druid IN 過濾表示

 

Java代碼   收藏代碼
  1. {  
  2.     "type": "in",  
  3.     "dimension": "outlaw",  
  4.     "values": ["Good", "Bad", "Ugly"]  
  5. }  

 

    範圍過濾(Bound filter)

         Bound filter 過濾比較值大小或小於某值,默認按字符串比較,使用數據比較須要設置alphaNumeric 屬
     性爲true;默認 Bound filter爲非嚴格性(類閉區間),如 inputString <= upper && inputSting >= lower

 

Java代碼   收藏代碼
  1. {  
  2.     "type": "bound",  
  3.     "dimension": "age",  
  4.     "lower": "21",  
  5.     "upper": "31" ,  
  6.     "alphaNumeric": true  
  7. }  
    上述表示等價如:21 <= age <= 31

 

    Bound filter 嚴格性,須要設置lowerStrict or/and upperStrict 屬性值爲true以下:

 

Java代碼   收藏代碼
  1. {  
  2.     "type": "bound",  
  3.     "dimension": "age",  
  4.     "lower": "21",  
  5.     "lowerStrict": true,  
  6.     "upper": "31" ,  
  7.     "upperStrict": true,  
  8.     "alphaNumeric": true  
  9. }  
    等價如:21 < age < 31

 

2.1.5 聚合(Aggregations)
   聚合能夠在採集時間時規格部分的一種方式,彙總數據進入Druid以前提供。聚合也能夠被指定爲在查詢時多查詢的部分,聚合類型以下:Count aggregator、Sum aggregators、Min / Max aggregators、Approximate Aggregations、Miscellaneous Aggregations 

 

    Count aggregator

          

        查詢返回匹配過濾條件的數據行數,須要注意的是:Druid進行Count查詢的數據量並不必定等於數據採
    集時導入的數據量,由於Druid在採集數據並導入時已經對數據進行了聚合。

 

Java代碼   收藏代碼
  1. "type" : "count", "name" : <output_name> }  

 

    Sum aggregator

 

          longSum aggregator:計算值爲有符號位64位整數

          

Java代碼   收藏代碼
  1. "type" : "longSum", "name" : <output_name>, "fieldName" : <metric_name> }  

   

          doubleSum aggregator:與longSum相似,計算值爲64位浮點型 

 

Java代碼   收藏代碼
  1. "type" : "doubleSum", "name" : <output_name>, "fieldName" : <metric_name> }  

 

    Min / Max aggregators

 

          doubleMin aggregator 

 

Java代碼   收藏代碼
  1. "type" : "doubleMin", "name" : <output_name>, "fieldName" : <metric_name> }  

    

          doubleMax aggregator

 

Java代碼   收藏代碼
  1. "type" : "doubleMax", "name" : <output_name>, "fieldName" : <metric_name> }  

 

          longMin aggregator

 

Java代碼   收藏代碼
  1. "type" : "longMin", "name" : <output_name>, "fieldName" : <metric_name> }  

 

         longMax aggregator

 

Java代碼   收藏代碼
  1. "type" : "longMax", "name" : <output_name>, "fieldName" : <metric_name> }  

 

    相似聚合(Approximate Aggregations)

         

        基數聚合(Cardinality aggregator)

  

         計算Druid多種維度基數,Cardinality aggregator使用HyperLogLog評估基數,這種聚合比帶有索引的
     hyperUnique聚合慢,運行在一個維度列,意味着不能從數據集中刪除字符串維度來提升聚合;通常咱們
     強力推薦使用hyperUnique aggregator而不是Cardinality aggregator,格式以下:

 

Java代碼   收藏代碼
  1. {  
  2.   "type": "cardinality",  
  3.   "name": "<output_name>",  
  4.   "fieldNames": [ <dimension1>, <dimension2>, ... ],  
  5.   "byRow": <false | true> # (optional, defaults to false)  
  6. }  

 

       . 維度值聚合-當設置屬性byRow爲false(默認值)時,經過合併全部給定的維度列來計算值集合。

         

         對於單維度,等價以下:

 

Java代碼   收藏代碼
  1. SELECT COUNT(DISTINCT(dimension)) FROM <datasource>  

        

         對於多維度,等價以下:

 

Java代碼   收藏代碼
  1. SELECT COUNT(DISTINCT(value)) FROM (  
  2.   SELECT dim_1 as value FROM <datasource>  
  3.   UNION  
  4.   SELECT dim_2 as value FROM <datasource>  
  5.   UNION  
  6.   SELECT dim_3 as value FROM <datasource>  
  7. )  

 

       行聚合-當設置屬性byRow爲true時,根所不一樣維度的值合併來計算行值,等價以下:

 

Java代碼   收藏代碼
  1. SELECT COUNT(*) FROM ( SELECT DIM1, DIM2, DIM3 FROM <datasource> GROUP BY DIM1, DIM2, DIM3 )  
 

 

           許多不一樣國家的人出生地或來自哪裏,用druid配置以下:

 

Java代碼   收藏代碼
  1. {  
  2.   "type": "cardinality",  
  3.   "name": "distinct_countries",  
  4.   "fieldNames": [ "coutry_of_origin", "country_of_residence" ]  
  5. }  
 

 

        HyperUnique aggregator

 

        已經被「hyperunique」在建立索引時聚合的維度值使用HyperLogLog計算估計,更多資料請參考官網

 

Java代碼   收藏代碼
  1. "type" : "hyperUnique", "name" : <output_name>, "fieldName" : <metric_name> }  

  

後聚合(post-aggregators)
後聚合是對Druid進行聚合後的值進行聚全,若是查詢中包括一個後聚合,那麼確保全部聚合知足後聚合要求;後聚合有如下幾種類型:
1. Arithmetic post-aggregators
2. Field accessor post-aggregator
3. Constant post-aggregator
4. JavaScript post-aggregator
5. HyperUnique Cardinality post-aggregator

     

         Arithmetic post-aggregators

 

           算術後聚合應用已提供的函數從左到右獲取字段,這些字段可聚合或後聚合;支持+-*/, and quotient。

           算術後聚合能夠指定ordering屬性,用於聚合結果排序(對topN查詢頗有用 ):

               (1) 若是無ordering屬性(或null),使用默認的浮點排序。

               (2) numericFirst 首先返回有限值,其次是NaN,最後返回無限值。

           算術後聚合語法以下:

 

Java代碼   收藏代碼
  1. postAggregation : {  
  2.   "type"  : "arithmetic",  
  3.   "name"  : <output_name>,  
  4.   "fn"    : <arithmetic_function>,  
  5.   "fields": [<post_aggregator>, <post_aggregator>, ...],  
  6.   "ordering" : <null (default), or "numericFirst">  
  7. }  
 

 

        Field accessor post-aggregator - fieldName引用aggregator定義的名稱

 

Java代碼   收藏代碼
  1. "type" : "fieldAccess", "name": <output_name>, "fieldName" : <aggregator_name> }  

 

        Constant post-aggregator - 返回指定值

 

Java代碼   收藏代碼
  1. "type"  : "constant", "name"  : <output_name>, "value" : <numerical_value> }  

 

 

2.2 時間序列查詢(Timeseries)
      這些類型的查詢以時間序列查詢對象和返回一個JSON數組對象,每一個對象表示時間序列查詢的值,時間序列查詢請求的Json的7個主要屬性以下:
屬性 描述 必填項
queryType 字符串類型,時間序列 "timeseries"    是
dataSource 字符串類型,數據源(相似數據庫表)    是
descending 排序標誌,默認爲 "false"(升序)    否
intervals 查詢時間範圍跨度,JSON對象,ISO-8601區間    是
granularity 定義查詢結果塊粒度    是
filter 過濾條件    否
aggregations 聚合    是
postAggregations 後聚合    否
context 下文    否

 

引用官網序列化查詢json配置代碼   收藏代碼
  1. {  
  2.   "queryType": "timeseries",  
  3.   "dataSource": "sample_datasource",  
  4.   "granularity": "day",  
  5.   "descending": "true",  
  6.   "filter": {  
  7.     "type": "and",  
  8.     "fields": [  
  9.       { "type": "selector", "dimension": "sample_dimension1", "value": "sample_value1" },  
  10.       { "type": "or",  
  11.         "fields": [  
  12.           { "type": "selector", "dimension": "sample_dimension2", "value": "sample_value2" },  
  13.           { "type": "selector", "dimension": "sample_dimension3", "value": "sample_value3" }  
  14.         ]  
  15.       }  
  16.     ]  
  17.   },  
  18.   "aggregations": [  
  19.     { "type": "longSum", "name": "sample_name1", "fieldName": "sample_fieldName1" },  
  20.     { "type": "doubleSum", "name": "sample_name2", "fieldName": "sample_fieldName2" }  
  21.   ],  
  22.   "postAggregations": [  
  23.     { "type": "arithmetic",  
  24.       "name": "sample_divide",  
  25.       "fn": "/",  
  26.       "fields": [  
  27.         { "type": "fieldAccess", "name": "postAgg__sample_name1", "fieldName": "sample_name1" },  
  28.         { "type": "fieldAccess", "name": "postAgg__sample_name2", "fieldName": "sample_name2" }  
  29.       ]  
  30.     }  
  31.   ],  
  32.   "intervals": [ "2012-01-01T00:00:00.000/2012-01-03T00:00:00.000" ]  
  33. }  

   

 

    上述配置了過濾條件,2個聚合,後聚合器將2個聚合結果進行相除。查詢結果以下,查詢結果存儲在屬性result,以鍵值對方式存儲:

 

Java代碼   收藏代碼
  1. [  
  2.   {  
  3.     "timestamp": "2012-01-01T00:00:00.000Z",  
  4.     "result": { "sample_name1": <some_value>, "sample_name2": <some_value>, "sample_divide": <some_value> }   
  5.   },  
  6.   {  
  7.     "timestamp": "2012-01-02T00:00:00.000Z",  
  8.     "result": { "sample_name1": <some_value>, "sample_name2": <some_value>, "sample_divide": <some_value> }  
  9.   }  
  10. ]  

  

2.3 排名查詢(TopN query)
    TopN查詢根據規範返回給定維度的有序的結果集,從概念上來說,TopN查詢被認爲單維度、有序的相似分組查詢。在某些狀況下,TopN查詢比分組查詢(groupby query)快。TopN查詢結果返回Json數組對象。
    TopN在每一個節點將頂上K個結果排名,在Druid默認狀況下最大值爲1000。在實踐中,若是你要求前1000個項順序排名,那麼從第1-999個項的順序正確性是100%,其後項的結果順序沒有保證。你能夠經過增長threshold值來保證順序準確。
屬性 描述 必填項
queryType 字符串類型,時間序列 "topN"    是
dataSource 字符串類型,數據源(相似數據庫表)    是
intervals 查詢時間範圍跨度,JSON對象,ISO-8601區間    是
granularity 定義查詢結果塊粒度    是
filter 過濾條件    否
aggregations 聚合    是
postAggregations 後聚合    否
dimension 查詢的維度(列)    是
threshold 返回Top N個結果    是
metric 字符串或Json對象指定度量對Top N個結果排序    是
context 上下文    否

  

Metric
屬性 描述 必填項
type 數字排序    是
metric 排序字段    是

  

       數據排序(Numeric TopNMetricSpec - 最簡單的規範指定一個字符串值指示排序TopN結果的度量

 

Java代碼   收藏代碼
  1. "metric": "<metric_name>"  
  

       metric屬性一般配置爲Json對象,上述等價於:

 

Java代碼   收藏代碼
  1. "metric": {  
  2.     "type": "numeric",  
  3.     "metric": "<metric_name>"  
  4. }  
 

    topN query 配置示例以下:

 

Java代碼   收藏代碼
  1. {  
  2.   "queryType": "topN",  
  3.   "dataSource": "sample_data",  
  4.   "dimension": "sample_dim",  
  5.   "threshold": 5,  
  6.   "metric": "count",  
  7.   "granularity": "all",  
  8.   "filter": {  
  9.     "type": "and",  
  10.     "fields": [  
  11.       {  
  12.         "type": "selector",  
  13.         "dimension": "dim1",  
  14.         "value": "some_value"  
  15.       },  
  16.       {  
  17.         "type": "selector",  
  18.         "dimension": "dim2",  
  19.         "value": "some_other_val"  
  20.       }  
  21.     ]  
  22.   },  
  23.   "aggregations": [  
  24.     {  
  25.       "type": "longSum",  
  26.       "name": "count",  
  27.       "fieldName": "count"  
  28.     },  
  29.     {  
  30.       "type": "doubleSum",  
  31.       "name": "some_metric",  
  32.       "fieldName": "some_metric"  
  33.     }  
  34.   ],  
  35.   "postAggregations": [  
  36.     {  
  37.       "type": "arithmetic",  
  38.       "name": "sample_divide",  
  39.       "fn": "/",  
  40.       "fields": [  
  41.         {  
  42.           "type": "fieldAccess",  
  43.           "name": "some_metric",  
  44.           "fieldName": "some_metric"  
  45.         },  
  46.         {  
  47.           "type": "fieldAccess",  
  48.           "name": "count",  
  49.           "fieldName": "count"  
  50.         }  
  51.       ]  
  52.     }  
  53.   ],  
  54.   "intervals": [  
  55.     "2013-08-31T00:00:00.000/2013-09-03T00:00:00.000"  
  56.   ]  
  57. }  

   

    查詢前Top 5個結果,按count排序:

 

Java代碼   收藏代碼
  1. [  
  2.   {  
  3.     "timestamp": "2013-08-31T00:00:00.000Z",  
  4.     "result": [  
  5.       {  
  6.         "dim1": "dim1_val",  
  7.         "count": 111,  
  8.         "some_metrics": 10669,  
  9.         "average": 96.11711711711712  
  10.       },  
  11.       {  
  12.         "dim1": "another_dim1_val",  
  13.         "count": 88,  
  14.         "some_metrics": 28344,  
  15.         "average": 322.09090909090907  
  16.       },  
  17.       {  
  18.         "dim1": "dim1_val3",  
  19.         "count": 70,  
  20.         "some_metrics": 871,  
  21.         "average": 12.442857142857143  
  22.       },  
  23.       {  
  24.         "dim1": "dim1_val4",  
  25.         "count": 62,  
  26.         "some_metrics": 815,  
  27.         "average": 13.14516129032258  
  28.       },  
  29.       {  
  30.         "dim1": "dim1_val5",  
  31.         "count": 60,  
  32.         "some_metrics": 2787,  
  33.         "average": 46.45  
  34.       }  
  35.     ]  
  36.   }  
  37. ]  
相關文章
相關標籤/搜索