我有来自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的字符串拆分表达式之类的东西。
有什么建议吗?
答案 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
应该可以解决问题!