# Математика и агрегация в конфиге Logstash

**URL:** <https://discuss.elastic.co/t/logstash/167445>\
**Category:** Вопросы на русском языке\
**Created:** [February 7, 2019, 12:08pm UTC](https://discuss.elastic.co/t/logstash/167445 "2019-02-07T12:08:31Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lebedev](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lebedev/32/53579_2.png) [@Lebedev](https://discuss.elastic.co/u/Lebedev)\
**Post date:** [February 7, 2019, 12:08pm UTC](https://discuss.elastic.co/t/logstash/167445/1 "2019-02-07T12:08:31Z")

</div>

Здравствуйте! Столкнулся со следующей задачей.  
Вкратце опишу.  
В конфиге Logstash есть input jdbc, который выполняет select запрос в базу данных Oracle один раз в 30 минут.  
На выходе я имею следующую информацию:

1. case:Podgotovka perevoda po nomeru karty @version:1 tags:oracle\_dwh sysdate:February 7th 2019, 13:00:00.000 status:1 @timestamp:February 7th 2019, 13:00:37.141 count(distinctm.order\_number):67 \_id:lI1mx2gBtOSIBx6g6k7R \_type:doc \_index:oracle\_dwh-2019.02.07 \_score: -

2)case:Podgotovka perevoda po nomeru karty @version:1 tags:oracle\_dwh sysdate:February 7th 2019, 13:00:00.000 status:0 @timestamp:February 7th 2019, 13:00:37.126 count(distinctm.order\_number):2 \_id:mI1mx2gBtOSIBx6g6k7g \_type:doc \_index:oracle\_dwh-2019.02.07 \_score: -

Эти две строки приходят раз в полчаса (это результат выполнения select). Суть в следующем: у меня в запросе есть 80 case-ов, то есть за один запрос в одно и тоже время у меня записывается 160 строк в эластик (иногда меньше, так как некоторые кейсы могут быть пустые). Каждый кейс пишет две строки со status = 0 ( плохие операции) и status = 1 (хорошие операции).

Нужно сделать следующее:

1)Сложить параметр count(distinctm.order\_number) со статусом 1 и 0 для каждого кейса.  
2)Разделить count(distinctm.order\_number) со статусом 0 (плохие операции) на сумму count(distinctm.order\_number) полученную на предыдущем шаге для каждого кейса соответственно (результат: коэффициент успешных операций).

Подскажите, как решить подобную задачу, насколько я понимаю необходимо агрегировать  
необходимые строки, а затем произвести вычисления. Буду рад любой помощи.

---

<div class="post-metadata">

**Author:** ![tito32](https://avatars.discourse-cdn.com/v4/letter/t/d26b3c/32.png) [@tito32](https://discuss.elastic.co/u/tito32)\
**Post date:** [February 27, 2019, 8:40am UTC](https://discuss.elastic.co/t/logstash/167445/2 "2019-02-27T08:40:22Z")

</div>

Привет!  
Для твоей задачи нужно использовать фильтр ruby.  
У него есть методы event.get и event.set для получения данных из массивов и вывода их в эластик. Все остальное это простое программирование на ruby.

Попробуй вот это [https://www.rubyguides.com/ruby-tutorial/loops/](https://www.rubyguides.com/ruby-tutorial/loops/)  
и [https://www.elastic.co/guide/en/logstash/current/event-api.html](https://www.elastic.co/guide/en/logstash/current/event-api.html)

---

<div class="post-metadata">

**Author:** ![Lebedev](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lebedev/32/53579_2.png) [@Lebedev](https://discuss.elastic.co/u/Lebedev)\
**Post date:** [February 27, 2019, 10:10am UTC](https://discuss.elastic.co/t/logstash/167445/3 "2019-02-27T10:10:40Z")

</div>

Привет.  
Да, пересобрал SQL и математику сделал на ruby.  
Спасибо!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [March 27, 2019, 10:10am UTC](https://discuss.elastic.co/t/logstash/167445/4 "2019-03-27T10:10:45Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
