从逗号分隔字符串摄取多值维

时间:2019-06-21 10:31:36

标签: druid data-ingestion

我有来自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", 
    ...  
  }  
}

但是,这导致将广告系列作为字符串提取。 我既找不到用flattenSpec中的jq表达式从中生成数组的方法,也找不到像可用作splitSpec的字符串拆分表达式之类的东西。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

尝试在摄入规格中设置useFieldDiscover: false。当此标志设置为true(默认情况下)时,它将在根级别将所有具有奇异值(而不是映射或列表)和平面列表(奇异值的列表)的字段解释为列。

这是一个使用扁平化规范的好例子和参考链接: https://druid.apache.org/docs/latest/ingestion/flatten-json.html

答案 1 :(得分:0)

从Druid 0.17.0开始,Druid表达式支持类型化的构造函数来创建数组,因此使用表达式string_to_array应该可以解决问题!