首页 文章

德鲁伊 - 按时间戳列排序数据

提问于
浏览
1

我已经设置了一个 Druid 集群来从 Kafka 中获取实时数据 .

Question

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

提前致谢 .

2 回答

  • 1

    Get unaggregated rows

    要获取未聚合的行,可以使用 "queryType: "select" 进行查询 .

    当需要分页时,选择查询也很有用 - 它们允许您设置页面大小,并自动返回分页标识符以供将来查询使用 .

    在这个例子中,如果我们只想要前10行,我们可以传入 "pagingSpec": { "pageIdentifiers": {}, "threshold": 10 } .

    Order by timestamp

    要通过"timestamp"对这些行进行排序,您可以传入 "descending": "true" . 看起来大多数德鲁伊查询类型都支持 descending 属性 .

    Example Query:

    {
      "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

  • 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"
      ]
    }
    

相关问题