1

我有来自 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 表达式从中生成数组的方法,也找不到可以用作 transformSpec 的字符串拆分表达式之类的东西。

有什么建议么?

4

2 回答 2

2

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

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

于 2019-06-28T01:25:19.143 回答
0

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

于 2020-07-08T19:48:25.320 回答