2015-12-16 46 views
0

我需要使用REST/JSON API從Druid中的索引中獲取一組維度的不同值。目前我正在使用以下聚集查詢(儘管我不需要聚合),因爲我找不到任何其他方式來獲取不同的值,因爲所有查詢都要求聚合字段。Druid - 一組列的不同值

{ 
    "queryType": "groupBy", 
    "dataSource": "ds1", 
    "granularity": "all", 
    "dimensions": ["level1","level2","level3", "val1", "val2"], 
    "aggregations": [{"type": "count","name": "val2Count","fieldName": "val2"}], 
    "intervals": ["2015-10-22T00:00:00.000/2015-12-22T23:00:00.000"] 
} 
  1. 我認爲這是一個常見的場景。有沒有辦法在沒有聚合的情況下獲得不同的列集?

  2. 當我用聚合的方式進行聚合時,如果有一個沒有聚合的話,這個聚合會影響性能(除了網絡IO的額外計數數據)在多大程度上影響性能?

回答

-1

您可以使用元數據查詢。此查詢將爲每個維度提供基數估計。 http://druid.io/docs/latest/querying/segmentmetadataquery.html 雖然如果您想要列出所有不同的組合,比如說對於dimension1和dimension2,您必須在dimension1和dimension2上使用groupBy。添加計數聚合器不會真正影響性能。

+0

元數據不具有不同價值觀的維度,我相信 – Ashish

+0

可以,如果你要列出所有你需要彙總數據,並使用計數聚合的獨特價值,你發佈一些示例代碼 – Ashish

+1

@Ashish我很抱歉。不要擔心計數聚合器的性能,因爲您必須以任何方式加載數據,這種情況下的性能與數據的基數有關。 –

0

你可以使用select查詢來做同樣的事情。 http://druid.io/docs/latest/querying/select-query.html

{ 
    "queryType": "select", 
    "dataSource": "ds1", 
    "granularity": "all", 
    "descending": "true", 
    "intervals": ["2016-05-01T00:00:00.000/2016-06-01T00:00:00.000"], 
    "dimensions":["level1","level2","level3", "val1", "val2"], 
    "pagingSpec":{"pagingIdentifiers": {}, "threshold":5} 
} 

如果你只有一個尺寸,那麼你也可以使用辭書TopNMetricSpec。 http://druid.io/docs/latest/querying/topnmetricspec.html