DataSketches Theta Sketch无法正常工作

时间:2019-07-10 16:58:39

标签: druid

我在从Theta Sketch DataSketches模块获取正确的不同计数编号时遇到问题。

我正在使用的摄入规格看起来像这样

    "granularitySpec" : 
    {
        "type" : "uniform",
        "segmentGranularity" : "HOUR",
        "queryGranularity" : "HOUR",
        "intervals": ["${hourToProcess.intervalFormat}"]
    }

    ..........

    "dimensionsSpec" :
    {
       "dimensions" : [
            "dimension1",
            "dimension2",
            ......
            "dimensionN"
        ]
    }

    ..........

    "timestampSpec" :
     {
         "format" : "${hourToProcess.ingestionDateFormat}",
         "column" : "eventTimestamp"
     }

    ..........

    "metricsSpecs" :
     [
         .........,
         {"type": "thetaSketch", "name": "uniqueUsers", "fieldName": "uniqueUsers"}
         ........
     ]

字段uniqueUsers是一个字符串。

如果我以以下方式查询Druid而不进行任何过滤或分组操作

    {
      "type" : "thetaSketch",
      "fieldName" : "uniqueUsers",
      "isInputThetaSketch": true
     }

结果正确。但是,如果我进行任何类型的过滤或按维度分组

    "filter": {
      "type": "selector",
      "dimension": "dimensionX",
      "value": "1"
    }

结果远高于预期值。

Theta Sketch内部或我的配置有问题吗?

我还想补充一点,如果我使用DataSketches HLL而不是ThetaSketch,则会得到更好的结果。

1 个答案:

答案 0 :(得分:0)

由于ThetaSketch支持基于集合的操作(联合,相交,差值),因此您需要在查询中指定过滤器,聚合和postAggregations部分。这些部分对于计算正确的结果至关重要。我认为,筛选器部分最为关键,因为它定义了将在postAggregations部分中合并的维度和值。

以下Druid文档非常有帮助。但是,他们的示例是groupBy查询。我相信他们的示例假设数据为原始格式,并且需要在查询时计算ThetaSketch。就您而言,您的草图已经在摄取时进行了预先计算,因此,时间序列查询会更快。

https://druid.apache.org/docs/latest/development/extensions-core/datasketches-theta.html

希望有帮助。