德鲁伊 - 按时间戳列

时间:2017-04-14 00:55:06

标签: time-series apache-kafka druid

我已设置Druid群集,以便从Kafka中提取实时数据。

问题

  1. Druid是否支持抓取按timestamp排序的数据?例如,假设我需要从数据源X中检索最新的10个条目。我可以使用包含时间戳字段的LimitSpec(在Query JSON中)来执行此操作吗?或者是否有其他更好的选项支持Druid
  2. 提前致谢。

2 个答案:

答案 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 }
}

Docs on "select" type queries