Druid - 按时间戳列排序数据
Druid - Order data by timestamp column
我已经设置了一个 Druid
集群来从 Kafka
获取实时数据。
问题
Druid
是否支持获取按 timestamp
排序的数据?例如,假设我需要从数据源 X 中检索最新的 10 个条目。我可以使用包含时间戳字段的 LimitSpec
(在 Query JSON
中)来执行此操作吗?或者是否支持其他更好的选项Druid
?
提前致谢。
您可以使用分组查询来执行此操作,因此将 __time 分组为 extraction function,然后将粒度设置为全部,并将 limitSpec 用于 sort/limit 这将起作用。现在,如果你想使用时间序列查询,那么获取最新的 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"
]
}
获取未聚合的行
要获取未聚合的行,您可以使用 "queryType: "select"
进行查询。
Select 查询在需要分页时也很有用 - 它们允许您设置页面大小,并自动 return 一个分页标识符以供将来查询使用。
在这个例子中,如果我们只想要前10行,我们可以传入"pagingSpec": { "pageIdentifiers": {}, "threshold": 10 }
。
按时间戳排序
要按 "timestamp" 对这些行进行排序,您可以传入 "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 }
}
我已经设置了一个 Druid
集群来从 Kafka
获取实时数据。
问题
Druid
是否支持获取按timestamp
排序的数据?例如,假设我需要从数据源 X 中检索最新的 10 个条目。我可以使用包含时间戳字段的LimitSpec
(在Query JSON
中)来执行此操作吗?或者是否支持其他更好的选项Druid
?
提前致谢。
您可以使用分组查询来执行此操作,因此将 __time 分组为 extraction function,然后将粒度设置为全部,并将 limitSpec 用于 sort/limit 这将起作用。现在,如果你想使用时间序列查询,那么获取最新的 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"
]
}
获取未聚合的行
要获取未聚合的行,您可以使用 "queryType: "select"
进行查询。
Select 查询在需要分页时也很有用 - 它们允许您设置页面大小,并自动 return 一个分页标识符以供将来查询使用。
在这个例子中,如果我们只想要前10行,我们可以传入"pagingSpec": { "pageIdentifiers": {}, "threshold": 10 }
。
按时间戳排序
要按 "timestamp" 对这些行进行排序,您可以传入 "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 }
}