【轉載】DRuid 大數據分析之查詢

轉載自http://yangyangmyself.iteye.com/blog/2321759
1、Druid 查詢概述
上一節完成數據導入后,接下來講講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>??

?

2、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的數據使用毫秒粒度獲取,數據如下:

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查詢,查詢配置如下:

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值為UTC

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屬性值)結果一樣,
? ? 此處的導入粒度為毫秒,結果如下:

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,結果如下:

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. ]??

轉載于:https://www.cnblogs.com/laoqing/p/9923020.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450779.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450779.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450779.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記錄 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff1a; Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentException: Pa…

[轉]簡單的動態修改RDLC報表頁邊距和列寬的方法

本文轉自&#xff1a;http://star704983.blog.163.com/blog/static/136661264201161604413204/ 1.修改頁邊距 XmlDocument XMLDoc new XmlDocument();XMLDoc.Load(System.Windows.Forms.Application.StartupPath "\Report_try-2.rdlc");XmlNamespaceManager xmn n…

函數式編程語言天生就慢嗎?

摘要&#xff1a;近期&#xff0c;函數式編程得到了越來越多的關注&#xff0c;Lisp不僅重獲青春還涌現出了一批新函數式編程語言。因此開發者們對函數式編程語言的運行快慢各抒己見&#xff0c;展開激烈討論。本文將和大家一起討論&#xff0c;函數式編程語言真的就慢嗎&#…

【老杜】MySQL—day02

文章目錄day02課堂筆記1、把查詢結果去除重復記錄【distinct】10、連接查詢10.1、什么是連接查詢&#xff1f;10.2、連接查詢的分類&#xff1f;10.3、當兩張表進行連接查詢時&#xff0c;沒有任何條件的限制會發生什么現象&#xff1f;10.4、怎么避免笛卡爾積現象&#xff1f;…

vue根據數組對象中某個唯一標識去重

由于在vue中&#xff0c;會自動在數組和對象中加入_obser__觀察者模式的一些屬性&#xff0c;所以直接用數組的filter去重&#xff08;下面這種&#xff09;&#xff0c;indexOf不能準確識別 var arr [1, 2, 2, 3, 4, 5, 5, 6, 7, 7]; var arr2 arr.filter(function(x, index…

Springsecurity之AuthenticationProvider

2019獨角獸企業重金招聘Python工程師標準>>> 注意&#xff1a;AuthenticationProvider與Authentication緊密聯系&#xff0c;關于Authentication&#xff0c;看我的這篇博客。 先上一張圖&#xff0c;如下圖1 圖1 AuthenticationProvider的類圖 AuthenticationProvi…

Postman使用入門

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Postman測試管理的單位是測試集&#xff08;Collections&#xff09;&#xff0c;測試集內可以創建文件夾(Folder)和具體的請求(Requests…

編程需要知道多少數學知識?

摘要&#xff1a;許多人認為在開始學習編程之前必須對數學很在行或者數學分數很高。但一個人為了編程的話&#xff0c;需要學習多少數學呢&#xff1f; 實際上不需要很多 。這篇文章中我會深入探討編程中所需要的數學知識。 下面是我在reddit的子論壇 r/learnprogramming 看到的…

HDU 6071 Lazy Running

鏈接HDU 6071 Lazy Running 給出四個點1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;1和2&#xff0c;2和3&#xff0c;3和4&#xff0c;4和1之間有路相連&#xff0c;現在從2點出發&#xff0c;最后回到2點&#xff0c;要求路徑大于等于\(K\)&#xff0c;問路徑長度最…

vue彈窗插件實戰

vue做移動端經常碰到彈窗的需求, 這里寫一個功能簡單的vue彈窗 popup.vue <template><div class"popup-wrapper" v-show"visible" click"hide"><div class"popup-text">{{text}}</div></div> </temp…

【狂神說】Redis筆記

文章目錄1、Nosql概述1.1 為什么要用Nosql1.2 什么是NoSQL1.3 阿里巴巴演進分析2、NoSQL的四大分類3、Redis入門3.1 概述3.2 Windows安裝3.3 Linux安裝3.4 測試性能3.5 基礎的知識4、五大數據類型4.1 Redis-Key4.2 String&#xff08;字符串&#xff09;4.3 List&#xff08;列…

Postman用法說明

見&#xff1a;http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法簡介-Http請求模擬工具 在我們平時開發中&#xff0c;特別是需要與接口打交道時&#xff0c;無論是寫接口還是用接口&#xff0c;拿到接口后肯定都得提前測試一下&#xff0c;這樣的話就…

位、字,字節與KB的關系?

位&#xff1a;我們常說的bit&#xff0c;位就是傳說中提到的計算機中的最小數據單位&#xff1a;說白了就是0或者1&#xff1b;計算機內存中的存儲都是01這兩個東西。 字節&#xff1a;英文單詞&#xff1a;&#xff08;byte&#xff09;&#xff0c;byte是存儲空間的基本計量…

C++ string 介紹

之所以拋棄char *的字符串而選用C標準程序庫中的string類&#xff0c;是因為他和前者比較起來&#xff0c;不必擔心內存是否足夠、字符串長度等等&#xff0c;而且作為一個類出現&#xff0c;他集成的操作函數足以完成我們大多數情況下(甚至是100%)的需要。我們可以用 進行賦…

Linux核心總結

文章目錄1.首先了解一下linux的目錄結構2.linux的基本命令之使用命令開關機3.linux的基本命令之目錄管理1.ls—列出目錄命令2.cd—切換目錄命令3.pwd—查看當前所在目錄命令4.mkdir—創建文件夾命令5.rmdir—刪除文件夾命令6.cp—復制文件命令7.rm—傳說中的刪庫跑路命令8.mv—…

Java多線程系列---“JUC鎖”01之 框架

本章&#xff0c;我們介紹鎖的架構&#xff1b;后面的章節將會對它們逐個進行分析介紹。目錄如下&#xff1a; 01. Java多線程系列--“JUC鎖”01之 框架02. Java多線程系列--“JUC鎖”02之 互斥鎖ReentrantLock06. Java多線程系列--“JUC鎖”03之 Condition條件07. Java多線程系…

IDEA配置jdk (SDK)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 提前安裝jdk&#xff0c;配置環境變量 一、配置jdk 1、依次點開File -->Project Structure&#xff0c;點擊左側標簽頁&#xff0c…

C、C++函數集 說明

第1章 數學函數 1.1 _chgsign——求參數的相反數 1.2 _copysign——復制數據 1.3 _hypot——求直角三角形斜邊長度 1.4 _max——求兩個數中的大數 1.5 _min——求兩個數中的小數 1.6 _scalb——求參數的(2^exp)倍數 1.7 abs——求整數的絕對值 1.8 acos——求…

讀書印記 - 《創新者的解答》

雖然作者寫書的意圖是教會大家如何完成顛覆式創新&#xff0c;但看完全書之后我覺得這個目標遠未達成&#xff0c;原因是作者的分析過于理論化&#xff0c;書中對于手機企業的發展建議即已被時間所否定。但如果標準放低&#xff0c;那這本書也確實總結出了不錯的顛覆式創新管理…

MinGW下編譯ffmpeg靜態庫給Visual C++使用

首先推薦 http://ffmpeg.zeranoe.com/builds/, 這里已經有編譯好的動態連接庫。可惜上面沒靜態鏈接庫。我也試過 DLL2Lib, 但是無法連接LIBCMT庫,只能使用MSVCRT 所以一定要靜態庫的話只能自己編譯了。在Windows上用MinGW編譯真是個痛苦的過程&#xff0c;沒有yum install和ap…