我有一个表中的输入数据。表格数据看起来像 <Customer_id> <Item_id> <Item name>。对于客户带来的每件商品,表中都有单独的一行。例如,如果c1购买i1,i2,i3,i4,i5,则表中将有5行。
<Customer_id> <Item_id> <Item name>
现在,我要插入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查询?
我采用的方法是创建一个SQL查询,将这些行Customer_ID组合在一起,并用于GROUP_CONCAT收集该组的所有项目。
Customer_ID
GROUP_CONCAT
然后,您可以将logstash jdbc输入与上面提出的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"}]}