2016-07-12 5 views
0

다음 형식으로 시뮬레이션에서 데이터를 수신합니다 : 당분간 Street 7에서 Street으로가는 두 대의 자동차가 있음을 볼 수 있듯이 11 (움직임을 모니터링하기 위해 센서가 배치 된 수많은 구역을 가로 질러).혼잡 제어 Esper 쿼리 언어를 사용하여 도로에있는 차량에 대한 쿼리

이제 자동차 # 1과 자동차 # 2의 최신 시간차가 3 초 이하일 때 신호를 멈추고 싶습니다. 어떻게 에스페셜 쿼리 언어로 그렇게 할 수 있습니까? 위의 조건이 충족되는 즉시 이벤트를 생성 할 수있는 복잡한 이벤트 처리를위한 쿼리를 작성해야합니다. 처음부터 차 # 1이 거리 # 7에 진입하는 시간은 42500이며, 차 # 2가 도로 # 7에 진입 할 때는 시간이 42508인데 8 초의 시간차가 있음을 데이터에서 알 수 있습니다.

{ time: 42500, 
     location: { Zone: 'Z3', Street: 'Street#7' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42502, 
     location: { Zone: 'Z5', Street: 'Street#7' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42502, 
     location: { Zone: 'Z1', Street: 'Street#8' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42504, 
     location: { Zone: 'Z4', Street: 'Street#8' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42505, 
     location: { Zone: 'Z5', Street: 'Street#8' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42505, 
     location: { Zone: 'Z1', Street: 'Street#9' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42507, 
     location: { Zone: 'Z4', Street: 'Street#9' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42508, 
     location: { Zone: 'Z3', Street: 'Street#7' }, 
     carID: 'car#2' } 
    --------------------------------------- 
    { time: 42508, 
     location: { Zone: 'Z5', Street: 'Street#9' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42508, 
     location: { Zone: 'Z1', Street: 'Street#10' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42509, 
     location: { Zone: 'Z4', Street: 'Street#10' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42509, 
     location: { Zone: 'Z5', Street: 'Street#7' }, 
     carID: 'car#2' } 
    --------------------------------------- 
    { time: 42509, 
     location: { Zone: 'Z1', Street: 'Street#8' }, 
     carID: 'car#2' } 
    --------------------------------------- 
    { time: 42511, 
     location: { Zone: 'Z5', Street: 'Street#10' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42511, 
     location: { Zone: 'Z1', Street: 'Street#11' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42511, 
     location: { Zone: 'Z4', Street: 'Street#8' }, 
     carID: 'car#2' } 
    --------------------------------------- 
    { time: 42512, 
     location: { Zone: 'Z4', Street: 'Street#11' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42512, 
     location: { Zone: 'Z5', Street: 'Street#8' }, 
     carID: 'car#2' } 
    --------------------------------------- 
    { time: 42512, 
     location: { Zone: 'Z1', Street: 'Street#9' }, 
     carID: 'car#2' } 
    --------------------------------------- 
    { time: 42513, 
     location: { Zone: 'Z5', Street: 'Street#11' }, 
     carID: 'car#1' } 
    --------------------------------------- 
    { time: 42513, 
     location: { Zone: 'Z1', Street: 'Street#12' }, 
     carID: 'car#1' } 
    --------------------------------------- 

답변

0

이 차 2. 질문의 이벤트와 자동차 1 이벤트 참여 같은 비트가 가입 이벤트의 하위 집합 다음입니다 소리. 유스 케이스에는 각 자동차가 방문한 거리의 역사를 간직해야하는 것으로 보입니다. 이를 위해 우리는 길이 윈도우 또는 고유 한 윈도우 또는 이들 윈도우의 합집합을 사용할 수 있습니다. 마지막 10 개의 거리 또는 이벤트를 고려한 길이 창을 사용할 수 있습니다. 예를 들어 다음과 같은 검색어 :

select * from Event(carID="car#1").win:length(20) as car1, Event(carID="car#2").win:length(20) as car2 where Math.abs(car1.time-car2.time) > 3 and car1.Location.Street = car2.Location.Street 
+0

안녕하세요, 도움을 주셔서 감사합니다. 그러나 차 # 1과 차 # 2가 동적 ID 인 것처럼, 단 한 가지 더 힌트가 필요합니다. 어떻게 그 차를 선택할 수 있습니까 ??? 나는 특별히 하드 코딩을하고 싶지 않다. – Umer

+0

CarEvent.win:time_length_batch(10, 100)에서 고유 한 CarID를 선택하십시오. 이 질문에 어떻게 대답할까요? – Umer

+0

select * from CarEvent.win:length(20) CARS, CarEvent.win:length(20) CARS_COPY로 CARS.CARID! = CARS_COPY.CARID AND (CARS.Location.Street = CARS_COPY.Location.Street AND Math. abs (CARS.time-CARS_COPY.time)> 3) ??? – Umer