2017-04-14 54 views
0

我已經設置了一個Druid集羣來從Kafka中提取實時數據。德魯伊 - 通過時間戳列的訂單數據

問題

  1. 是否Druid支持獲取多數民衆贊成由timestamp排序的數據?例如,假設我需要從數據源X中檢索最新的10個條目。我可以通過使用包含時間戳字段的LimitSpec(位於Query JSON)來執行此操作嗎?還是有另一個更好的選項支持Druid

在此先感謝。

回答

0

獲取的未聚集行

爲了獲得非聚集行,你可以做一個查詢與"queryType: "select"

當需要分頁時,選擇查詢也很有用 - 它們允許您設置頁面大小,並自動返回分頁標識符以供將來查詢使用。

在這個例子中,如果我們只想要前10行,我們可以通過"pagingSpec": { "pageIdentifiers": {}, "threshold": 10 }

訂購時間戳

要訂購這些行由「時間戳」,你可以在"descending": "true"通過。 看起來像大多數德魯伊查詢類型支持descending屬性。

實例查詢:

{ 
    "queryType": "select", 
    "dataSource": "my_data_source", 
    "granularity": "all", 
    "intervals": [ "2017-01-01T00:00:00.000Z/2017-12-30T00:00:00.000Z" ], 
    "descending": "true", 
    "pagingSpec": { "pageIdentifiers": {}, "threshold": 10 } 
} 

Docs on "select" type queries

0

你可以通過查詢使用一個組來做到這一點,所以按__time分組爲extraction function,然後爲所有人設置粒度,並使用limitSpec排序/限制工作。現在,如果你想使用時間序列查詢,獲得最新的10就更加棘手。一種方法是將粒度設置爲期望的值,比如說小時,然後將時間間隔設置爲10H,從最近的點開始時間。這聽起來比實現更容易說。除非您遇到重大性能問題,否則我會採取第一種方式。

{ 
    "queryType": "groupBy", 
    "dataSource": "wikiticker", 
    "granularity": "all", 
    "dimensions": [ 
    { 
     "type": "extraction", 
     "dimension": "__time", 
     "outputName": "extract_time", 
     "extractionFn": { 
     "type": "timeFormat" 
     } 
    }, 
    ], 
    "limitSpec": { 
    "type": "default", 
    "limit": 10, 
    "columns": [ 
     { 
     "dimension": "extract_time", 
     "direction": "descending" 
     } 
    ] 
    }, 
    "aggregations": [ 
    { 
     "type": "count", 
     "name": "$f2" 
    }, 
    { 
     "type": "longMax", 
     "name": "$f3", 
     "fieldName": "added" 
    } 
    ], 
    "intervals": [ 
    "1900-01-01T00:00:00.000/3000-01-01T00:00:00.000" 
    ] 
} 
+0

修身你能寫一個例子查詢? –