我已经建立了一个Druid
集群来从Kafka
.
问题
- 是否
Druid
支持获取按 排序的数据timestamp
?例如,假设我需要从数据源 X 中检索最新的 10 个条目。我可以通过使用包含时间戳字段的LimitSpec
(在 中)来做到这一点吗?Query JSON
还是支持其他更好的选择Druid
?
提前致谢。
我已经建立了一个Druid
集群来从Kafka
.
问题
Druid
支持获取按 排序的数据timestamp
?例如,假设我需要从数据源 X 中检索最新的 10 个条目。我可以通过使用包含时间戳字段的LimitSpec
(在 中)来做到这一点吗?Query JSON
还是支持其他更好的选择Druid
?提前致谢。
获取未聚合的行
要获取未聚合的行,您可以使用"queryType: "select"
.
当需要分页时,选择查询也很有用——它们允许您设置页面大小,并自动返回分页标识符以供将来查询使用。
在这个例子中,如果我们只想要前 10 行,我们可以传入"pagingSpec": { "pageIdentifiers": {}, "threshold": 10 }
.
按时间戳排序
要按“时间戳”对这些行进行排序,您可以传入"descending": "true"
. 看起来大多数 Druid 查询类型都支持该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 }
}
您可以使用 group by 查询来执行此操作,因此按 __time 分组作为提取函数,然后将粒度设置为 all 并使用 limitSpec 进行排序/限制将起作用。现在,如果您想使用时间序列查询,获取最新的 10 则更加棘手。一种方法是将粒度设置为所需的粒度,比如说 Hour 然后将间隔设置为从最近的点开始的 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"
]
}