Рассчитать значение поля на основе значений других полей - PullRequest
1 голос
/ 19 сентября 2019

У меня есть несколько полей вроде этого:

Group_servers|Name_server|Status**
Group1| server1|OK                
Group1| server2|OK  
Group2| server1|OK  
Group2| server1|No data  
Group2| server1|Yellow
Group2| server1|

Я хочу получить результат, как показано ниже

Group_servers|Status
Group1|OK                
Group1| No data 

Условия формирования групп статуса следующие:

1. If at least one server in the group has the status "No data" or the field is empty, the status for the group is " No data" 
2. If at least one server in the group has the "Yellow" status, the status for the group is " Yellow"
3. If all servers in the group have the status "OK", the status for the group is " OK"

1 Ответ

0 голосов
/ 20 сентября 2019

Вот два способа, один из которых может быть более понятным, чем другой

| fillnull value="No data" Status | stats values(Status) as StatusList by Group_servers даст вам что-то вроде следующего

Group_servers|StatusList
------------------------
Group1       |OK
------------------------
Group2       |No data
             |Yellow
------------------------

Затем вы можете использовать mvfind, чтобы определить, чтозначения присутствуют для каждой группы.

| fillnull value="No data" Status | stats values(Status) as StatusList by Group_servers | eval Status=if(isnotnull(mvfind(StatusList,"No data")),"NoData",( isnotnull(mvfind(StatusList,"Yellow")),"Yellow","OK"))

В качестве альтернативы, вы можете сделать что-то вроде следующего, который просто присваивает числовой счет каждому статусу, а затем получает минимум длякаждая группа.

eval status_code=case(Status="OK",2, Status="Yellow",1,1==1,0) | stats min(status_code) as min_status_code by Group_servers | eval Status=case(min_status_code=2,"OK",min_status_code=1,"Yellow",1==1,"No data")

...