我从表中获取输入数据。表数据看起来像
<Customer_id> <Item_id> <Item name>
。对于客户带来的每件商品,表格中都有一个单独的行。例如,如果c1购买i1,i2,i3,i4,i5它将在表中有5行。
现在,我想要插入到elasticsearch中的数据是这样的:
{
"c1": [
{
"item_id": "i1",
"item_name": "ABC"
},
{
"item_id": "i2",
"item_name": "XYZ"
},
.....
],
"c2": [
{
"item_id": 4,
"item_name": "PQR"
}
]
}
如何在logstash中修改上面的输入?
我的架构也是这样的:
项目: item_id,item_name
买: cust_id,item_id
您也可以建议进行SQL查询以获得上述输出吗?
答案 0 :(得分:0)
我接近这个的方法是创建一个SQL查询,将Customer_ID
上的这些行组合在一起,然后使用GROUP_CONCAT
收集该组的所有项目。
然后,您可以将logstash jdbc input与上面提到的SQL查询一起使用,您应该很好。
<强>更新强>
我的SQL查询有点像这样:
SELECT CONCAT('{"',cust_id,'": [',GROUP_CONCAT(CONCAT('{"item_id":',buy.item_id,','),CONCAT('"item_name": "',item.item_name,'"}')), ']}')
FROM item, buy
WHERE buy.item_id = item.item_id
GROUP BY cust_id
生成这样的行,它们非常接近你需要的行:
{"1": [{"item_id":1,"item_name": "abc"},{"item_id":2,"item_name": "xyz"}]}
{"2": [{"item_id":4,"item_name": "pqr"}]}