Получение многозначного измерения из строки с разделителями-запятыми

У меня есть данные о событиях от Kafka со следующей структурой, которые я хочу принять в Druid

{
  "event": "some_event",
  "id": "1",
  "parameters": {
    "campaigns": "campaign1, campaign2",
    "other_stuff": "important_info"  
  }
}

В частности, я хочу преобразовать измерение «кампании» из строки, разделенной запятыми, в массив / многозначное измерение, чтобы его можно было хорошо отфильтровать и сгруппировать по. Мой прием пищи пока выглядит следующим образом

{
  "type": "kafka",
  "dataSchema": {
    "dataSource": "event-data",
    "parser": {
      "type": "string",
      "parseSpec": {
        "format": "json",
        "timestampSpec": {
          "column": "timestamp",
          "format": "posix"
        },
        "flattenSpec": {
          "fields": [
            {
              "type": "root", 
              "name": "parameters"
            },
            {
              "type": "jq", 
              "name": "campaigns", 
              "expr": ".parameters.campaigns"
            }
          ]
        }
      },
      "dimensionSpec": {
        "dimensions": [
          "event", 
          "id", 
          "campaigns"
        ]
      }
    },
    "metricsSpec": [
      {
        "type": "count",
        "name": "count"
      }
    ],
    "granularitySpec": {
      "type": "uniform",
      ...
    }
  },
  "tuningConfig": {
      "type": "kafka",
      ...
  },
  "ioConfig": {
    "topic": "production-tracking", 
    ...  
  }  
}

Что, однако, приводит к тому, что кампании принимаются в виде строки. Я не мог найти способ сгенерировать из него массив с помощью выражения jq в flattenSpec, и я не нашел чего-то вроде выражения разделения строки, которое можно использовать как transformSpec.

Какие-либо предложения?


person denise    schedule 21.06.2019    source источник


Ответы (2)


Попробуйте установить useFieldDiscover: false в спецификации приема. когда для этого флага установлено значение true (что является случаем по умолчанию), он интерпретирует все поля с сингулярными значениями (не карта или список) и плоские списки (списки сингулярных значений) на корневом уровне как столбцы.

Вот хороший пример и справочная ссылка для использования спецификации flatten: https://druid.apache.org/docs/latest/ingestion/flatten-json.html

person Jainik    schedule 28.06.2019
comment
спасибо, это хорошо знать. однако поле представляет собой строку, с которой начинается, поэтому, к сожалению, это ничего не меняет. - person denise; 29.07.2019

Похоже, начиная с версии Druid 0.17.0, выражения Druid поддерживают типизированные конструкторы для создания массивов, поэтому использование выражения string_to_array должно помочь!

person denise    schedule 08.07.2020