У меня есть индекс с именем Events
Он содержит кучу разных событий, все события имеют свойство под названием EventName
. Теперь я хочу выполнить запрос, в котором я возвращаю все, что соответствует следующему:
ЕСЛИ AccountId существует в событии с EventName AccountCreated
И есть как минимум 1 событие с EventName FavoriteCreated
с тем же AccountId -> вернуть все события, где EventName == AccountCreated
Примеры событий:
AccountCreated
{
"AccountId": 1234,
"EventName": "AccountCreated",
"SomeOtherProperty": "Some value",
"Brand": "My Brand",
"DeviceType": "Mobile",
"EventTime": "2020-06-01T12:13:14Z"
}
FavoriteCreated
{
"AccountId": 1234,
"EventName": "FavoritesCreated,
"Brand": "My Brand",
"DeviceType": "Mobile",
"EventTime": "2020-06-01T12:13:14Z"
}
Учитывая следующие два события, я хотел бы создать 1 запрос, который возвращает событие AccountCreated.
Я пробовал следующее, но это не работает, конечно, мне что-то не хватает просто?
index=events EventName=AccountCreated
[search index=events EventName=FavoriteCreated | dedup AccountId | fields AccountId]
| table AccountId, SomeOtherProperty
Я ожидаю ~ 6000 просмотров, но получаю только 2298 событий. Что мне не хватает?
ОБНОВЛЕНИЕ На основании ответа, предоставленного @warren ниже, следующий запрос работает. Единственная проблема заключается в том, что он использует JOIN, который ограничивает нас 50 КБ результатов подисследования. При выполнении этого запроса я получаю всего 5900 результатов = правильно.
index=events EventName=AccountCreated AccountId=*
| stats count by AccountId, EventName
| fields - count
| join AccountId
[ | search index=events EventName=FavoriteCreated AccountId=*
| stats count by AccountId ]
| fields - count
| table AccountId, EventName
Затем я попытался использовать его обновленный пример, подобный этому, но проблема, похоже, в том, что он возвращает события FavoriteCreated вместо AccountCreated. При выполнении этого запроса я получаю 25 494 совпадений = Неверно.
index=events AccountId=* (EventName=AccountCreated OR EventName=FavoriteCreated)
| stats values(EventName) as EventName by AccountId
| eval EventName=mvindex(EventName,-1)
| search EventName="FavoriteCreated"
| table AccountId, EventName
Обновление 2 - РАБОТАЕТ @warren великолепен, вот полный рабочий запрос, который возвращает данные только из событий AccountCreated ЕСЛИ существует 1 или несколько событий FavoriteCreated.
index=events AccountId=* (EventName=AccountCreated OR EventName=FavoriteCreated)
| stats
values(Brand) as Brand,
values(DeviceType) as DeviceType,
values(Email) as Email,
values(EventName) as EventName
values(EventTime) as EventTime,
values(Locale) as Locale,
values(ClientIp) as ClientIp
by AccountId
| where mvcount(EventName)>1
| eval EventName=mvindex(EventName,0)
| eval EventTime=mvindex(EventTime,0)
| eval ClientIp=mvindex(ClientIp,0)
| eval DeviceType=mvindex(DeviceType,0)