Загрузка многозначного измерения из строки с запятой - PullRequest
1 голос
/ 21 июня 2019

У меня есть данные о событиях из Кафки со следующей структурой, которые я хочу использовать в 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.

Есть предложения?

1 Ответ

1 голос
/ 28 июня 2019

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

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

...