我已设置Druid
群集,以便从Kafka
中提取实时数据。
问题
Druid
是否支持抓取按timestamp
排序的数据?例如,假设我需要从数据源X中检索最新的10个条目。我可以使用包含时间戳字段的LimitSpec
(在Query JSON
中)来执行此操作吗?或者是否有其他更好的选项支持Druid
?提前致谢。
答案 0 :(得分:1)
您可以按查询分组来执行此操作,因此将__time分组为extraction function,然后将粒度设置为all,并使用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"
]
}
答案 1 :(得分:1)
获取未分页的行
要获取未聚合的行,您可以使用"queryType: "select"
进行查询。
选择查询在需要分页时也很有用 - 它们允许您设置页面大小,并自动返回分页标识符以供将来查询使用。
在这个例子中,如果我们只想要前10行,我们可以传入"pagingSpec": { "pageIdentifiers": {}, "threshold": 10 }
。
按时间戳排序
要通过" timestamp"订购这些行,您可以传入"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 }
}