2017-04-14 56 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

修身你能写一个例子查询? –