druidクエリーインタフェースの使用
26916 ワード
コアdruidクエリーインタフェースの使用
druidのクエリーインタフェースはHTTP RESTスタイルのクエリー方式であり、HTTP RESTスタイルクエリー(Broker,Historical,またはRealtime)ノードのデータを使用し、クエリーパラメータはJSON形式であり、ノードタイプごとに同じRESTクエリーインタフェースが露出する
queryable_host:brokerノードip port:brokerノードポートデフォルト8082
Queryクエリのタイプは、1、Timeseries 2、TopN 3、Group By 4、Time Boundary 5、Segment Metadata 6、Datasource Metadata 7、Search 8、select
ここで、Timeseries、TopN、GroupByは集約クエリー、Time Boundary、Segment Metadata、Datasource Metadataはメタデータクエリー、Searchは検索クエリー
1、Timeseriesは、一定期間の集計データを統計する必要がある場合、または時間粒度を指定する集計データに対して、druidはTimeseriesによって完了することができる.
timeseriesクエリには、次のフィールドが含まれます.
timeseriesは、時間粒度ごとに条件を指定する統計情報を出力し、filterによって条件フィルタを指定し、aggregationsとpostAggregationsによって集約方法を指定します.timeseriesは次元情報を出力できません.granularityはall,none,second,minute,hour,day,week,month,yearなどの次元をサポートします.
all:出力を1つまとめるnone:使用を推奨しません
その他:該当する粒度統計を出力
クエリのjson
TopNは、指定する次元と並べ替えフィールドの順序top-nシーケンスを返す.TopNは、前のNレコードを返すことをサポートし、指定されたMetricをソート基準としてサポートします.
Metric:TopN専用方式です.
なお,TopNは近似アルゴリズムであり,各segmentが上位1000個を返して集計して最終的な結果を得るが,dimensionの基数が1000以内であれば正確であり,1000を超えると近似値である.
groupBy groupByはSQLのgroupby操作と似ており、指定した複数の次元をグループ化したり、指定した次元をソートしたり、limit行数を出力したりすることができ、having操作をサポートします.
sql
GroupBy固有のフィールドはlimitSpecとhavingです
LimitSpecソートルールとlimitの行数を指定
ここでcolumnsは配列であり、複数のソートフィールドを指定できます.ソートフィールドはdemensionまたはmetricにソートルールのスペルを指定できます.
havingはSQLのhaving操作に似ています
select
selectはsqlのselect操作と似ています.selectはdruidに格納されているデータを表示し、指定されたフィルタと時間帯に従って指定された次元とmetricを表示することをサポートします.descendingフィールドでソート順を指定し、ページングをサポートしますが、aggregationsとpostAggregations jsonの例は次のとおりです.
SQL文
pagingSpecでページングプルのoffsetとエントリ数を指定し、結果として次のプルのoffsetを返します.
Search
searchクエリは、SQLのtopN操作と同様に、マッチング内の次元を返しますが、jsonの例では、より多くのマッチング操作をサポートします.
検索次元
なお、searchはマッチング中の次元を返すだけで、他の集約操作はサポートされていません.searchをクエリー条件としてtopN、groupBy、timeseriesなどの操作を行う場合は、filterフィールドに様々なフィルタ方法を指定できます.filterフィールドも正規マッチングをサポートします.クエリーの結果は次のとおりです.
クエリーの選択
1、可能な場合、GroupByではなくTimeseriesとTopNクエリーを使用することをお勧めします.GroupByは最も柔軟なクエリーであり、最悪の表現です.次元のグループ化を必要としない集約の場合、TimeseriesはGroupByクエリよりも速く、単一次元のグループ化とソートの場合、TopNクエリはGroupByよりも最適化されます.
druidのクエリーインタフェースはHTTP RESTスタイルのクエリー方式であり、HTTP RESTスタイルクエリー(Broker,Historical,またはRealtime)ノードのデータを使用し、クエリーパラメータはJSON形式であり、ノードタイプごとに同じRESTクエリーインタフェースが露出する
curl -X POST ':/druid/v2/?pretty' -H 'Content-Type:application/json' -d @<query_json_file>
queryable_host:brokerノードip port:brokerノードポートデフォルト8082
curl -L -H'Content-Type: application/json' -XPOST --data-binary @quickstart/aa.json http://10.20.23.41:8082/druid/v2/?pretty
Queryクエリのタイプは、1、Timeseries 2、TopN 3、Group By 4、Time Boundary 5、Segment Metadata 6、Datasource Metadata 7、Search 8、select
ここで、Timeseries、TopN、GroupByは集約クエリー、Time Boundary、Segment Metadata、Datasource Metadataはメタデータクエリー、Searchは検索クエリー
1、Timeseriesは、一定期間の集計データを統計する必要がある場合、または時間粒度を指定する集計データに対して、druidはTimeseriesによって完了することができる.
timeseriesクエリには、次のフィールドが含まれます.
queryType , timeseries
dataSource
descending
intervals , ISO-8601
granularity
filter
aggregations
postAggregations
context
timeseriesは、時間粒度ごとに条件を指定する統計情報を出力し、filterによって条件フィルタを指定し、aggregationsとpostAggregationsによって集約方法を指定します.timeseriesは次元情報を出力できません.granularityはall,none,second,minute,hour,day,week,month,yearなどの次元をサポートします.
all:出力を1つまとめるnone:使用を推奨しません
その他:該当する粒度統計を出力
クエリのjson
{
"aggregations": [
{
"type": "count",
"name": "count"
}
],
"intervals": "1917-08-25T08:35:20+00:00/2017-08-25T08:35:20+00:00",
"dataSource": "app_auto_prem_qd_pp3",
"granularity": "all",
"postAggregations": [],
"queryType": "timeseries"
}
sql select count(1) from app_auto_prem_qd_pp3
に等しいTopNは、指定する次元と並べ替えフィールドの順序top-nシーケンスを返す.TopNは、前のNレコードを返すことをサポートし、指定されたMetricをソート基準としてサポートします.
{
"metric": "sum__total_standard_premium",
"aggregations": [
{
"type": "doubleSum",
"fieldName": "total_standard_premium",
"name": "sum__total_standard_premium"
}
],
"dimension": "is_new_car",
"intervals": "1917-08-29T20:05:10+00:00/2017-08-29T20:05:10+00:00",
"dataSource": "app_auto_prem_qd_pp3",
"granularity": "all",
"threshold": 50000,
"postAggregations": [],
"queryType": "topN"
}
queryType TopN , TopN
dataSource
intervals , ISO-8601
filter
aggregations
postAggregations
dimension TopN , TopN
threshold TopN N
metric metric
context
Metric:TopN専用方式です.
"metric":""
"metric" : {
"type" : "numeric", // numeric
"metric" : ""
}
"metric" : {
"type" : "inverted", // numeric
"metric" : ""
}
"metric" : {
"type" : "lexicographic", //
"metric" : ""
}
"metric" : {
"type" : "alphaNumeric", //
"metric" : ""
}
なお,TopNは近似アルゴリズムであり,各segmentが上位1000個を返して集計して最終的な結果を得るが,dimensionの基数が1000以内であれば正確であり,1000を超えると近似値である.
groupBy groupByはSQLのgroupby操作と似ており、指定した複数の次元をグループ化したり、指定した次元をソートしたり、limit行数を出力したりすることができ、having操作をサポートします.
{
"dimensions": [
"is_new_car",
"status"
],
"aggregations": [
{
"type": "doubleSum",
"fieldName": "total_standard_premium",
"name": "sum__total_standard_premium"
}
],
"having": {
"type": "greaterThan",
"aggregation": "sum__total_standard_premium",
"value": "484000"
},
"intervals": "1917-08-29T20:26:52+00:00/2017-08-29T20:26:52+00:00",
"limitSpec": {
"limit": 2,
"type": "default",
"columns": [
{
"direction": "descending",
"dimension": "sum__total_standard_premium"
}
]
},
"granularity": "all",
"postAggregations": [],
"queryType": "groupBy",
"dataSource": "app_auto_prem_qd_pp3"
}
sql
select is_new_car,status,sum(total_standard_premium) from app_auto_prem_qd_pp3 group by is_new_car,status limit 50000 having sum(total_standard_premium)>484000
に等しい{
"version" : "v1",
"timestamp" : "1917-08-30T04:26:52.000+08:00",
"event" : {
"sum__total_standard_premium" : 8.726074368E9,
"is_new_car" : " ",
"status" : null
}
}, {
"version" : "v1",
"timestamp" : "1917-08-30T04:26:52.000+08:00",
"event" : {
"sum__total_standard_premium" : 615152.0,
"is_new_car" : " ",
"status" : null
}
}
queryType GroupBy , GroupBy
dataSource
dimensions GroupBy
limitSpec
having
granularity
postAggregations
intervals , ISO-8601
context
GroupBy固有のフィールドはlimitSpecとhavingです
LimitSpecソートルールとlimitの行数を指定
{
"type" : "default",
"limit": ,
"columns":[list of OrderByColumnSpec]
}
ここでcolumnsは配列であり、複数のソートフィールドを指定できます.ソートフィールドはdemensionまたはmetricにソートルールのスペルを指定できます.
{
"dimension" :"" ,
"direction" : <"ascending"|"descending">
}
"limitSpec": {
"limit": 2,
"type": "default",
"columns": [
{
"direction": "descending",
"dimension": "sum__total_standard_premium"
},
{
"direction": "ascending",
"dimension": "is_new_car"
}
]
}
havingはSQLのhaving操作に似ています
select
selectはsqlのselect操作と似ています.selectはdruidに格納されているデータを表示し、指定されたフィルタと時間帯に従って指定された次元とmetricを表示することをサポートします.descendingフィールドでソート順を指定し、ページングをサポートしますが、aggregationsとpostAggregations jsonの例は次のとおりです.
{
"dimensions": [
"status",
"is_new_car"
],
"pagingSpec":{
"pagingIdentifiers":{},
"threshold":3
},
"intervals": "1917-08-25T08:35:20+00:00/2017-08-25T08:35:20+00:00",
"dataSource": "app_auto_prem_qd_pp3",
"granularity": "all",
"context" : {
"skipEmptyBuckets" : "true"
},
"queryType": "select"
}
SQL文
select status,is_new_car from app_auto_prem_qd_pp3 limit 3
に相当[ {
"timestamp" : "2017-08-22T14:00:00.000Z",
"result" : {
"pagingIdentifiers" : {
"app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00" : 2
},
"dimensions" : [ "is_new_car", "status" ],
"metrics" : [ "total_actual_premium", "count", "total_standard_premium" ],
"events" : [ {
"segmentId" : "app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00",
"offset" : 0,
"event" : {
"timestamp" : "2017-08-22T22:00:00.000+08:00",
"status" : null,
"is_new_car" : " ",
"total_actual_premium" : 1012.5399780273438,
"count" : 1,
"total_standard_premium" : 1250.050048828125
}
}, {
"segmentId" : "app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00",
"offset" : 1,
"event" : {
"timestamp" : "2017-08-22T22:00:00.000+08:00",
"status" : null,
"is_new_car" : " ",
"total_actual_premium" : 708.780029296875,
"count" : 1,
"total_standard_premium" : 1250.050048828125
}
}, {
"segmentId" : "app_auto_prem_qd_pp3_2017-08-22T08:00:00.000+08:00_2017-08-23T08:00:00.000+08:00_2017-08-22T18:11:01.983+08:00",
"offset" : 2,
"event" : {
"timestamp" : "2017-08-22T22:00:00.000+08:00",
"status" : null,
"is_new_car" : " ",
"total_actual_premium" : 1165.489990234375,
"count" : 1,
"total_standard_premium" : 1692.800048828125
}
} ]
}
} ]
pagingSpecでページングプルのoffsetとエントリ数を指定し、結果として次のプルのoffsetを返します.
"pagingSpec":{
"pagingIdentifiers":{},
"threshold":3,
"fromNext" :true
}
Search
searchクエリは、SQLのtopN操作と同様に、マッチング内の次元を返しますが、jsonの例では、より多くのマッチング操作をサポートします.
{
"queryType": "search",
"dataSource": "app_auto_prem_qd_pp3",
"granularity": "all",
"limit": 2,
"searchDimensions": [
"data_source",
"department_code"
],
"query": {
"type": "insensitive_contains",
"value": "1"
},
"sort" : {
"type": "lexicographic"
},
"intervals": [
"1917-08-25T08:35:20+00:00/2017-08-25T08:35:20+00:00"
]
}
検索次元
queryType search , search
dataSource
searchDimensions search
limit ( 1000)
granularity
intervals , ISO-8601
sort
query
context
filter
なお、searchはマッチング中の次元を返すだけで、他の集約操作はサポートされていません.searchをクエリー条件としてtopN、groupBy、timeseriesなどの操作を行う場合は、filterフィールドに様々なフィルタ方法を指定できます.filterフィールドも正規マッチングをサポートします.クエリーの結果は次のとおりです.
[ {
"timestamp" : "2017-08-22T08:00:00.000+08:00",
"result" : [ {
"dimension" : "data_source",
"value" : "226931204023",
"count" : 2
}, {
"dimension" : "data_source",
"value" : "226931204055",
"count" : 7
} ]
} ]
クエリーの選択
1、可能な場合、GroupByではなくTimeseriesとTopNクエリーを使用することをお勧めします.GroupByは最も柔軟なクエリーであり、最悪の表現です.次元のグループ化を必要としない集約の場合、TimeseriesはGroupByクエリよりも速く、単一次元のグループ化とソートの場合、TopNクエリはGroupByよりも最適化されます.