DataSketches Theta Sketch не работает должным образом - PullRequest
1 голос
/ 10 июля 2019

У меня проблемы с получением правильных отдельных чисел из модуля 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"}
         ........
     ]

Поле uniqueUsersa String.

Если я запрашиваю Друида следующим образом без какой-либо операции фильтрации или группировки

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

, результаты верны.Но если я выполняю какую-либо фильтрацию или группировку по измерениям

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

, результаты значительно превышают ожидаемые значения.

Что-то не так внутри Theta Sketch или моей конфигурации?

Я также хочу добавить, что если я использую DataSketches HLL вместо ThetaSketch, я получаю гораздо лучшие результаты.

1 Ответ

0 голосов
/ 12 июля 2019

Поскольку ThetaSketch поддерживает операции на основе множеств (объединение, пересечение, разность), вам необходимо указать в запросе разделы фильтра, агрегации и postAggregations. Эти разделы имеют решающее значение для вычисления правильных результатов. На мой взгляд, раздел фильтра является наиболее важным, поскольку он определяет измерение и значения, которые будут объединены в разделе postAggregations.

Следующий документ Друида очень полезен. Однако их примером является запрос groupBy. Я полагаю, что их пример предполагает, что данные находятся в необработанном виде, и ThetaSketch должен быть вычислен во время запроса. В вашем случае ваш эскиз уже предварительно вычислен при приеме, поэтому запрос временных рядов будет намного быстрее.

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

Надеюсь, это поможет.

...