Apache Группа друидов по виртуальным столбцам - PullRequest
3 голосов
/ 06 августа 2020

Я пытаюсь создать виртуальный столбец groupby в собственном запросе Druid, который выглядит так ...

{
  "queryType": "groupBy",
  "dataSource": "trace_info",
  "granularity": "none",
  "virtualColumns": [
    {
      "type": "expression",
      "name": "tenant",
      "expression": "replace(array_offset(tags, array_offset_of(tagNames, 'tenant')), 'tenant:', '')"
    },
    {
      "type": "expression",
      "name": "rc",
      "expression": "replace(array_offset(tags, array_offset_of(tagNames, 'row_count')), 'row_count:', '')"
    }
  ],
  "dimensions": [
    "tenant"
  ],
  "aggregations": [
    {
      "type": "longSum",
      "name": "trc",
      "fieldName": "rc"
    }
  ],

...
...
...

  "intervals": [
    "..."
  ]
}

Это дает одну строку с длинной суммой всех row_counts, как если бы столбец groupBy null.

Я правильно использую или это известная проблема в Druid. В документации говорится, что виртуальные столбцы можно использовать как обычные размеры, но не очень ясно, как или даже рабочий пример отсутствует.

Спасибо! Фани

1 Ответ

0 голосов
/ 07 августа 2020

Последнее редактирование ...

Еще немного покопаемся, чтобы выяснить, что проблема заключалась в отсутствии атрибутов outputType в виртуальных столбцах. Странно, потому что агрегатор может автоматически определять время и правильно рассчитывать длинную сумму, даже если группа по результатам была неправильной.

  "virtualColumns": [
    {
      "type": "expression",
      "name": "tenant",
      "expression": "replace(array_offset(tags, array_offset_of(tagNames, 'tenant')), 'tenant:', '')",
      "outputType": "STRING"
    },
    {
      "type": "expression",
      "name": "rc",
      "expression": "replace(array_offset(tags, array_offset_of(tagNames, 'row_count')), 'row_count:', '')"
      "outputType": "LONG"
    }
  ],

См. Выше (ниже, вероятно, неэффективный способ работы с проблема).

После некоторых проб и ошибок у меня есть обходной путь с использованием размеров извлечения. Хотя я не уверен, но подозреваю, что это временная проблема в Druid 0.18.1. Надеюсь, группировка по венчурным капиталистам будет работать, как было объявлено в будущих сборках.

{
  "queryType": "groupBy",
  "dataSource": "trace_info",
  "granularity": "none",
  "virtualColumns": [
    {
      "type": "expression",
      "name": "tenant",
      "expression": "replace(array_offset(tags, array_offset_of(tagNames, 'tenant')), 'tenant:', '')"
    },
    {
      "type": "expression",
      "name": "rc",
      "expression": "replace(array_offset(tags, array_offset_of(tagNames, 'row_count')), 'row_count:', '')"
    }
  ],
  "dimensions": [
    {
      "type": "extraction",
      "dimension": "tenant",
      "outputName": "t",
      "extractionFn": {
        "type" : "substring", "index" : 1
      }
    }
  ],
  "aggregations": [
    {
      "type": "longSum",
      "name": "trc",
      "fieldName": "rc"
    }
  ],

...
...
...

  "intervals": [
    "..."
  ]
}
...