2015-04-19 4 views
1

У меня есть два sourcetypes:Как динамически ограничивать диапазон времени?

A определяет период деятельности:

_time, лица, start_time, END_TIME, активность, ...

B определяет 2D позицию организации:

_time, entity, x, y, ....

Теперь я попытался извлечь только те строки всех сущностей в B, которые находятся в пределах периодов, определенных в A, как я могу это сделать? Кажется, я не могу провести сравнение с командой «join» на время?

+0

Каково значение поля _time в A по отношению к start_time и end_time? В чем смысл поля _time в B? Ожидаете ли вы много строк в A и/или B с одинаковым значением объекта? –

+0

_time в A на самом деле здесь незначительно, я ставлю его только потому, что у spunk всегда есть это поле. Важно то, как сравнить _time в B, чтобы начать время и время окончания в A – Gordon

ответ

0

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

В этом случае один подход использует streamstats для создания событий, которые денормализуются для включения соответствующих полей деятельности в каждое событие местоположения. Во-первых, убедитесь, что каждое событие из индекса A считает start_time полем _time. Затем используйте streamstats, чтобы заполнить каждое событие нулевыми start_time, end_time или activity полями (которые должны поступать из индекса B) с последним значением для этого entity, который был не нулевым (который должен поступать из индекса A). Наконец, отфильтруйте любые события, где _time>end_time, что было бы любым событием позиции, которое выходит за пределы окна активности.

index=A OR index=B 
| eval _time=coalesce(start_time, _time) 
| streamstats latest(start_time) as activity_start_time, latest(end_time) as activity_end_time, latest(activity) as activity by entity 
| where _time<=end_time 

Имейте в виду, что этот подход предполагает, что деятельность аккуратно упорядочены, так что никакая деятельность не перекрывает другую. Это было бы немного сложнее, если действия могут перекрываться.

Другой метод, который я иногда использую, заключается в использовании transaction вместо streamstats. Это дает гораздо больший контроль над логикой, когда начинается и заканчивается одна активность, и приводит к одному событию за активность с многозначными полями для позиции. Вы хотите начать с одного поля «точка» для каждой позиции, если вы пройдете по этому маршруту.

+0

, какой аккуратный ответ! – Gordon