日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转载】DRuid 大数据分析之查询

發(fā)布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】DRuid 大数据分析之查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉載自http://yangyangmyself.iteye.com/blog/2321759 1、Druid 查詢概述 上一節(jié)完成數(shù)據(jù)導入后,接下來講講Druid如何查詢及統(tǒng)計分析導入的數(shù)據(jù)。
? ? Druid的查詢是使用REST風格的HTTP請求查詢服務節(jié)點(Broker、Historical、Realtime),這些服務節(jié)點暴露REST查詢接口,客戶端發(fā)送Json對象請求查詢接口。一般情況下,查詢服務接口發(fā)布在Broker節(jié)點,基于Linux 的POST請求查詢如下所示:? Java代碼??
  • /**?
  • *?port:?查詢請求接口對應Broker,默認8082端口?
  • *?query_json_file:?查詢Json對象文件(配置)?
  • */??
  • 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. 元數(shù)據(jù)查詢 - 時間范圍(Time Boundary) 、段元數(shù)據(jù)(Segment Metadata)、數(shù)據(jù)源(Datasource)
    ? ? ?3. Search查詢 - Search
    ? ? ?本節(jié)以聚合查詢?yōu)橹?#xff0c;其它查詢類型比較簡單,使用上相對比較少,暫不介紹。對聚合查詢類型下的3種查詢如何選擇進行一下概述:
    ? ? ?在可能的情況下,我們建議使用的時間序列和TopN查詢代替分組查詢,分組查詢是Druid最靈活的的查詢,但是性能最差。時間序列查詢是明顯快于GROUPBY查詢,因為聚合不需要分組尺寸。對于分組和排序在一個單一的維度,TopN查詢更優(yōu)于GROUPBY。

    ?

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

    ?

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

    ?

    2.1.3 聚合粒度(granularity) 粒度決定如何得到數(shù)據(jù)塊在跨時間維度,或者如何得到按小時,天,分鐘的匯總等。在配置查詢聚合粒度里有三種配置方法:
    ? ??1. 簡單聚合粒度?- 支持字符串值有:all、none、second、minute、fifteen_minute、thirty_minute、hour、day、week、month、quarter、year
    ? ? ? ?(1) all - 將所有塊變成一塊
    ? ? ? ?(2) none - 不使用塊數(shù)據(jù)(它實際上是使用最小索引的粒度,none意味著為毫秒級的粒度);按時間序列化查詢時不建議使用none,因為所有的毫秒不存在,系統(tǒng)也將嘗試生成0值,這往往是很多。
    ? ??2. 時間段聚合粒度?- Druid指定一精確的持續(xù)時間(毫秒)和時間綴返回UTC(世界標準時間)。
    ? ??3. 常用時間段聚合粒度?- 與時間段聚合粒度差不多,但是常用時間指平時我們常用時間段,如年、月、周、小時等。
    ? ? 下面對3種聚合粒度配置舉例說明:

    ??

    ? ??簡單聚合粒度

    ? ? ? ??查詢粒度比數(shù)據(jù)采集時配置的粒度小,則不合理,也無意義,因較小粒度(相比)者無索引數(shù)據(jù);如
    ? ? 查詢粒度小于采集時配置的查詢粒度時,則Druid的查詢結果與采集數(shù)據(jù)配置的查詢粒度結果一樣。

    ? ? ? ? 假設我們存儲在Druid的數(shù)據(jù)使用毫秒粒度獲取,數(shù)據(jù)如下:

    Java代碼??
  • {"timestamp":?"2013-08-31T01:02:33Z",?"page":?"AAA",?"language"?:?"en"}??
  • {"timestamp":?"2013-09-01T01:02:33Z",?"page":?"BBB",?"language"?:?"en"}??
  • {"timestamp":?"2013-09-02T23:32:45Z",?"page":?"CCC",?"language"?:?"en"}??
  • {"timestamp":?"2013-09-03T03:32:45Z",?"page":?"DDD",?"language"?:?"en"}??
  • ? ? ? ?以"小時" 粒度提交一個groupby查詢,查詢配置如下:

    Java代碼??
  • {??
  • ???"queryType":"groupBy",??
  • ???"dataSource":"dataSource",??
  • ???"granularity":"hour",??
  • ???"dimensions":[??
  • ??????"language"??
  • ???],??
  • ???"aggregations":[??
  • ??????{??
  • ?????????"type":"count",??
  • ?????????"name":"count"??
  • ??????}??
  • ???],??
  • ???"intervals":[??
  • ??????"2000-01-01T00:00Z/3000-01-01T00:00Z"??
  • ???]??
  • }??
  • ? ? ??按小時粒度進行的groupby查詢結果中timestamp值精確到小時間,比小時粒度更小粒度值自動補填零,

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

    Java代碼??
  • [?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-08-31T01:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-01T01:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-02T23:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-03T03:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • }?]??
  • ? ? ? ?如果指定查詢粒度為 none,則返回結果與數(shù)據(jù)導入時設置粒度(queryGranularity屬性值)結果一樣,
    ? ? 此處的導入粒度為毫秒,結果如下:

    Java代碼??
  • [?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-08-31T01:02:33.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-01T01:02:33.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-02T23:32:45.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-03T03:32:45.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • }?]??
  • ? ? ?如果指定查詢粒度為 all,返回數(shù)組長度結果為1,結果如下:

    Java代碼??
  • [?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2000-01-01T00:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?4,??
  • ????"language"?:?"en"??
  • ??}??
  • }?]??
  • ?

    ? ??時間段聚合粒度?

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

    ?

    Java代碼??
  • /**持續(xù)時間段2小時,從1970-01-01T00:00:00Z開始*/??
  • {"type":?"duration",?"duration":?7200000}??
  • Java代碼??
  • /**持續(xù)時間1小時,從origin開始*/??
  • {"type":?"duration",?"duration":?3600000,?"origin":?"2012-01-01T00:30:00Z"}??
  • ??? ? ?

    ? ??以上簡單聚合粒度的示例數(shù)據(jù)為例,提交groupby查詢,持續(xù)時間段為24小時,查詢配置如下:

    ?

    Java代碼??
  • {??
  • ???"queryType":"groupBy",??
  • ???"dataSource":"dataSource",??
  • ???"granularity":{"type":?"duration",?"duration":?"86400000"},??
  • ???"dimensions":[??
  • ??????"language"??
  • ???],??
  • ???"aggregations":[??
  • ??????{??
  • ?????????"type":"count",??
  • ?????????"name":"count"??
  • ??????}??
  • ???],??
  • ???"intervals":[??
  • ??????"2000-01-01T00:00Z/3000-01-01T00:00Z"??
  • ???]??
  • }??
  • ? ? ?查詢結果:

    Java代碼??
  • [?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-08-31T00:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-01T00:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-02T00:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • },?{??
  • ??"version"?:?"v1",??
  • ??"timestamp"?:?"2013-09-03T00:00:00.000Z",??
  • ??"event"?:?{??
  • ????"count"?:?1,??
  • ????"language"?:?"en"??
  • ??}??
  • }?]??
  • ? ??

    ? ? 常用時間段聚合粒度

    ?

    ? ? ? ? ?略...

    ?

    ?

    2.1.4 過濾(Filters) 一個Filter就是一個Json對象,用于過濾數(shù)據(jù)行過濾,類似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代碼??
  • "filter":?{?"type":?"selector",?"dimension":?<dimension_string>,?"value":?<dimension_value_string>?}??
  • ? ?

    ? ? 正則表達過濾(Regular expression filter)

    ? ? ? ? ? ?與Selector filte差不多,只是這里使用正則表達式,表達式為標準的Java正則表達式規(guī)范

    ?

    Java代碼??
  • "filter":?{?"type":?"regex",?"dimension":?<dimension_string>,?"pattern":?<pattern_string>?}??
  • ?

    ? ??邏緝表達過濾(Logical expression filters)

    ? ?

    ? ? ?AND

    ?

    Java代碼??
  • "filter":?{?"type":?"and",?"fields":?[<filter>,?<filter>,?...]?}??
  • ?

    ? ? ?OR

    ?

    Java代碼??
  • "filter":?{?"type":?"or",?"fields":?[<filter>,?<filter>,?...]?}??
  • ?

    ? ? ?NOT

    ?

    Java代碼??
  • "filter":?{?"type":?"not",?"field":?<filter>?}??
  • ?

    ?

    ? ??IN過濾(In filter)

    ? ? ? ?

    ? ? SQL查詢

    ?

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

    ?

    Java代碼??
  • {??
  • ????"type":?"in",??
  • ????"dimension":?"outlaw",??
  • ????"values":?["Good",?"Bad",?"Ugly"]??
  • }??
  • ?

    ? ??范圍過濾(Bound filter)

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

    ?

    Java代碼??
  • {??
  • ????"type":?"bound",??
  • ????"dimension":?"age",??
  • ????"lower":?"21",??
  • ????"upper":?"31"?,??
  • ????"alphaNumeric":?true??
  • }??
  • ? ? 上述表示等價如:21 <= age <= 31

    ?

    ? ??Bound filter?嚴格性,需要設置lowerStrict or/and upperStrict 屬性值為true如下:

    ?

    Java代碼??
  • {??
  • ????"type":?"bound",??
  • ????"dimension":?"age",??
  • ????"lower":?"21",??
  • ????"lowerStrict":?true,??
  • ????"upper":?"31"?,??
  • ????"upperStrict":?true,??
  • ????"alphaNumeric":?true??
  • }??
  • ? ? 等價如:21 < age < 31

    ?

    2.1.5 聚合(Aggregations) 聚合可以在采集時間時規(guī)格部分的一種方式,匯總數(shù)據(jù)進入Druid之前提供。聚合也可以被指定為在查詢時多查詢的部分,聚合類型如下:Count aggregator、Sum aggregators、Min / Max aggregators、Approximate Aggregations、Miscellaneous Aggregations?

    ?

    ? ??Count aggregator

    ? ? ? ? ??

    ? ? ? ??查詢返回匹配過濾條件的數(shù)據(jù)行數(shù),需要注意的是:Druid進行Count查詢的數(shù)據(jù)量并不一定等于數(shù)據(jù)采
    ? ? 集時導入的數(shù)據(jù)量,因為Druid在采集數(shù)據(jù)并導入時已經(jīng)對數(shù)據(jù)進行了聚合。

    ?

    Java代碼??
  • {?"type"?:?"count",?"name"?:?<output_name>?}??
  • ?

    ? ? Sum aggregator

    ?

    ? ? ? ? ??longSum aggregator:計算值為有符號位64位整數(shù)

    ? ? ? ? ??

    Java代碼??
  • {?"type"?:?"longSum",?"name"?:?<output_name>,?"fieldName"?:?<metric_name>?}??
  • ? ?

    ? ? ? ????doubleSum aggregator:與longSum類似,計算值為64位浮點型?

    ?

    Java代碼??
  • {?"type"?:?"doubleSum",?"name"?:?<output_name>,?"fieldName"?:?<metric_name>?}??
  • ?

    ? ??Min / Max aggregators

    ?

    ? ? ? ? ??doubleMin aggregator?

    ?

    Java代碼??
  • {?"type"?:?"doubleMin",?"name"?:?<output_name>,?"fieldName"?:?<metric_name>?}??
  • ? ??

    ? ? ? ? ??doubleMax aggregator

    ?

    Java代碼??
  • {?"type"?:?"doubleMax",?"name"?:?<output_name>,?"fieldName"?:?<metric_name>?}??
  • ?

    ? ? ? ? ??longMin aggregator

    ?

    Java代碼??
  • {?"type"?:?"longMin",?"name"?:?<output_name>,?"fieldName"?:?<metric_name>?}??
  • ?

    ? ? ? ? ?longMax aggregator

    ?

    Java代碼??
  • {?"type"?:?"longMax",?"name"?:?<output_name>,?"fieldName"?:?<metric_name>?}??
  • ?

    ? ??類似聚合(Approximate Aggregations)

    ? ? ? ? ?

    ? ? ? ??基數(shù)聚合(Cardinality aggregator)

    ??

    ? ? ? ? ?計算Druid多種維度基數(shù),Cardinality aggregator使用HyperLogLog評估基數(shù),這種聚合比帶有索引的
    ? ? ?hyperUnique聚合慢,運行在一個維度列,意味著不能從數(shù)據(jù)集中刪除字符串維度來提高聚合;一般我們
    ? ? ?強力推薦使用hyperUnique aggregator而不是Cardinality aggregator,格式如下:

    ?

    Java代碼??
  • {??
  • ??"type":?"cardinality",??
  • ??"name":?"<output_name>",??
  • ??"fieldNames":?[?<dimension1>,?<dimension2>,?...?],??
  • ??"byRow":?<false?|?true>?#?(optional,?defaults?to?false)??
  • }??
  • ?

    ? ? ? ?.?維度值聚合-當設置屬性byRow為false(默認值)時,通過合并所有給定的維度列來計算值集合。

    ? ? ? ? ?

    ? ? ? ? ?對于單維度,等價如下:

    ?

    Java代碼??
  • SELECT?COUNT(DISTINCT(dimension))?FROM?<datasource>??
  • ? ? ? ??

    ? ? ? ? ?對于多維度,等價如下:

    ?

    Java代碼??
  • SELECT?COUNT(DISTINCT(value))?FROM?(??
  • ??SELECT?dim_1?as?value?FROM?<datasource>??
  • ??UNION??
  • ??SELECT?dim_2?as?value?FROM?<datasource>??
  • ??UNION??
  • ??SELECT?dim_3?as?value?FROM?<datasource>??
  • )??
  • ?

    ? ? ? ?.?行聚合-當設置屬性byRow為true時,根所不同維度的值合并來計算行值,等價如下:

    ?

    Java代碼??
  • SELECT?COUNT(*)?FROM?(?SELECT?DIM1,?DIM2,?DIM3?FROM?<datasource>?GROUP?BY?DIM1,?DIM2,?DIM3?)??
  • ?

    ?

    ? ? ? ? ? ?許多不同國家的人出生地或來自哪里,用druid配置如下:

    ?

    Java代碼??
  • {??
  • ??"type":?"cardinality",??
  • ??"name":?"distinct_countries",??
  • ??"fieldNames":?[?"coutry_of_origin",?"country_of_residence"?]??
  • }??
  • ?

    ?

    ? ? ? ??HyperUnique aggregator

    ?

    ? ? ? ? 已經(jīng)被“hyperunique”在創(chuàng)建索引時聚合的維度值使用HyperLogLog計算估計,更多資料請參考官網(wǎng)

    ?

    Java代碼??
  • {?"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

    ?

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

    ? ? ? ? ? ?算術后聚合可以指定ordering屬性,用于聚合結果排序(對topN查詢很有用?):

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

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

    ? ? ? ? ? ?算術后聚合語法如下:

    ?

    Java代碼??
  • postAggregation?:?{??
  • ??"type"??:?"arithmetic",??
  • ??"name"??:?<output_name>,??
  • ??"fn"????:?<arithmetic_function>,??
  • ??"fields":?[<post_aggregator>,?<post_aggregator>,?...],??
  • ??"ordering"?:?<null?(default),?or?"numericFirst">??
  • }??
  • ?

    ?

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

    ?

    Java代碼??
  • {?"type"?:?"fieldAccess",?"name":?<output_name>,?"fieldName"?:?<aggregator_name>?}??
  • ?

    ? ? ? ??Constant post-aggregator -?返回指定值

    ?

    Java代碼??
  • {?"type"??:?"constant",?"name"??:?<output_name>,?"value"?:?<numerical_value>?}??
  • ?

    ?

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

    ?

    引用官網(wǎng)序列化查詢json配置代碼??
  • {??
  • ??"queryType":?"timeseries",??
  • ??"dataSource":?"sample_datasource",??
  • ??"granularity":?"day",??
  • ??"descending":?"true",??
  • ??"filter":?{??
  • ????"type":?"and",??
  • ????"fields":?[??
  • ??????{?"type":?"selector",?"dimension":?"sample_dimension1",?"value":?"sample_value1"?},??
  • ??????{?"type":?"or",??
  • ????????"fields":?[??
  • ??????????{?"type":?"selector",?"dimension":?"sample_dimension2",?"value":?"sample_value2"?},??
  • ??????????{?"type":?"selector",?"dimension":?"sample_dimension3",?"value":?"sample_value3"?}??
  • ????????]??
  • ??????}??
  • ????]??
  • ??},??
  • ??"aggregations":?[??
  • ????{?"type":?"longSum",?"name":?"sample_name1",?"fieldName":?"sample_fieldName1"?},??
  • ????{?"type":?"doubleSum",?"name":?"sample_name2",?"fieldName":?"sample_fieldName2"?}??
  • ??],??
  • ??"postAggregations":?[??
  • ????{?"type":?"arithmetic",??
  • ??????"name":?"sample_divide",??
  • ??????"fn":?"/",??
  • ??????"fields":?[??
  • ????????{?"type":?"fieldAccess",?"name":?"postAgg__sample_name1",?"fieldName":?"sample_name1"?},??
  • ????????{?"type":?"fieldAccess",?"name":?"postAgg__sample_name2",?"fieldName":?"sample_name2"?}??
  • ??????]??
  • ????}??
  • ??],??
  • ??"intervals":?[?"2012-01-01T00:00:00.000/2012-01-03T00:00:00.000"?]??
  • }??
  • ???

    ?

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

    ?

    Java代碼??
  • [??
  • ??{??
  • ????"timestamp":?"2012-01-01T00:00:00.000Z",??
  • ????"result":?{?"sample_name1":?<some_value>,?"sample_name2":?<some_value>,?"sample_divide":?<some_value>?}???
  • ??},??
  • ??{??
  • ????"timestamp":?"2012-01-02T00:00:00.000Z",??
  • ????"result":?{?"sample_name1":?<some_value>,?"sample_name2":?<some_value>,?"sample_divide":?<some_value>?}??
  • ??}??
  • ]??
  • ??

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

    ??

    Metric
    屬性描述必填項
    type數(shù)字排序? ?是
    metric排序字段? ?是

    ??

    ? ? ???數(shù)據(jù)排序(Numeric TopNMetricSpec?-?最簡單的規(guī)范指定一個字符串值指示排序TopN結果的度量

    ?

    Java代碼??
  • "metric":?"<metric_name>"??
  • ??

    ? ? ? ?metric屬性通常配置為Json對象,上述等價于:

    ?

    Java代碼??
  • "metric":?{??
  • ????"type":?"numeric",??
  • ????"metric":?"<metric_name>"??
  • }??
  • ?

    ? ??topN query 配置示例如下:

    ?

    Java代碼??
  • {??
  • ??"queryType":?"topN",??
  • ??"dataSource":?"sample_data",??
  • ??"dimension":?"sample_dim",??
  • ??"threshold":?5,??
  • ??"metric":?"count",??
  • ??"granularity":?"all",??
  • ??"filter":?{??
  • ????"type":?"and",??
  • ????"fields":?[??
  • ??????{??
  • ????????"type":?"selector",??
  • ????????"dimension":?"dim1",??
  • ????????"value":?"some_value"??
  • ??????},??
  • ??????{??
  • ????????"type":?"selector",??
  • ????????"dimension":?"dim2",??
  • ????????"value":?"some_other_val"??
  • ??????}??
  • ????]??
  • ??},??
  • ??"aggregations":?[??
  • ????{??
  • ??????"type":?"longSum",??
  • ??????"name":?"count",??
  • ??????"fieldName":?"count"??
  • ????},??
  • ????{??
  • ??????"type":?"doubleSum",??
  • ??????"name":?"some_metric",??
  • ??????"fieldName":?"some_metric"??
  • ????}??
  • ??],??
  • ??"postAggregations":?[??
  • ????{??
  • ??????"type":?"arithmetic",??
  • ??????"name":?"sample_divide",??
  • ??????"fn":?"/",??
  • ??????"fields":?[??
  • ????????{??
  • ??????????"type":?"fieldAccess",??
  • ??????????"name":?"some_metric",??
  • ??????????"fieldName":?"some_metric"??
  • ????????},??
  • ????????{??
  • ??????????"type":?"fieldAccess",??
  • ??????????"name":?"count",??
  • ??????????"fieldName":?"count"??
  • ????????}??
  • ??????]??
  • ????}??
  • ??],??
  • ??"intervals":?[??
  • ????"2013-08-31T00:00:00.000/2013-09-03T00:00:00.000"??
  • ??]??
  • }??
  • ? ?

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

    ?

    Java代碼??
  • [??
  • ??{??
  • ????"timestamp":?"2013-08-31T00:00:00.000Z",??
  • ????"result":?[??
  • ??????{??
  • ????????"dim1":?"dim1_val",??
  • ????????"count":?111,??
  • ????????"some_metrics":?10669,??
  • ????????"average":?96.11711711711712??
  • ??????},??
  • ??????{??
  • ????????"dim1":?"another_dim1_val",??
  • ????????"count":?88,??
  • ????????"some_metrics":?28344,??
  • ????????"average":?322.09090909090907??
  • ??????},??
  • ??????{??
  • ????????"dim1":?"dim1_val3",??
  • ????????"count":?70,??
  • ????????"some_metrics":?871,??
  • ????????"average":?12.442857142857143??
  • ??????},??
  • ??????{??
  • ????????"dim1":?"dim1_val4",??
  • ????????"count":?62,??
  • ????????"some_metrics":?815,??
  • ????????"average":?13.14516129032258??
  • ??????},??
  • ??????{??
  • ????????"dim1":?"dim1_val5",??
  • ????????"count":?60,??
  • ????????"some_metrics":?2787,??
  • ????????"average":?46.45??
  • ??????}??
  • ????]??
  • ??}??
  • ]??
  • 轉載于:https://www.cnblogs.com/laoqing/p/9923020.html

    總結

    以上是生活随笔為你收集整理的【转载】DRuid 大数据分析之查询的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。