evtctxadd

입력 데이터가 조건식과 일치하면 지정된 키로 이벤트 컨텍스트를 생성합니다.

문법

evtctxadd dynamic=t key=KEY_FIELD CONDITIONAL_EXPR

또는

evtctxadd [expire=INT{mon|d|h|m|s}] [maxrows=INT] [timeout=INT{mon|d|h|m|s}] topic=STR key=KEY_FIELD CONDITIONAL_EXPR
필수 매개변수
dynamic=BOOL
입력 레코드로부터 topic, expire, timeout, maxrows을 전달받아 사용하는 기능(기본값: f)
  • t: 입력 레코드로부터 동적으로 topic, expire, timeout, maxrows을 받아서 사용. dynamic=t일 때, topic, expire, timeout, maxrows 옵션을 함께 사용할 수 없습니다.
  • f: 사용 안 함
topic=STR
이벤트 컨텍스트의 이름(토픽). 토픽은 인-메모리 데이터베이스의 테이블의 이름과 같은 역할을 합니다. dynamic=t일 때, 이 옵션을 사용할 수 없습니다.
key=KEY_FIELD
키 필드의 이름. 이벤트 컨텍스트를 구분하는 고유 키는 키 필드에 저장합니다.
CONDITIONAL_EXPR
이벤트 컨텍스트를 생성할 조건이 되는 표현식
선택 매개변수
expire=INT{mon|d|h|m|s}
이벤트 컨텍스의 삭제 시점을 mon (월), d (일), h (시), m (분), s (초) 단위로 지정. 이벤트 컨텍스트가 생성된 후 지정한 시간이 지나면 컨텍스트를 삭제합니다. expire가 설정되면 이벤트 컨텍스트 조건식 CONDITIONAL_EXPR에 일치하는 입력 데이터가 있어도 만료 시간은 연장되지 않습니다. dynamic=t일 때 이 옵션을 사용할 수 없습니다.
maxrows=INT
이벤트 컨텍스트에 저장할 레코드의 최대 개수(기본값: 10). dynamic=t일 때 이 옵션을 사용할 수 없습니다.
timeout=INT{mon|d|h|m|s}
이벤트 컨텍스트 조건식 CONDITIONAL_EXPR에 일치하는 이벤트가 수신된 시점부터 지정된 시간이 지나면 이벤트 컨텍스트를 삭제합니다. mon (월), d (일), h (시), m (분), s (초) 단위로 지정할 수 있습니다. dynamic=t일 때 이 옵션을 사용할 수 없습니다.

사용 예

전문 전송 후 응답 수신이 10초 이상 경과하면 타임아웃 발생

evtctxadd topic=txmatch key=txkey timeout=10s type == "send"
| evtctxdel topic=txmatch key=txkey type == "recv"

예시로 든 쿼리문은 다음과 같은 이벤트 컨텍스트 생성/삭제 명령으로 구성되어 있습니다.

  • evtctxadd: type 필드 값이 send인 경우 이벤트 컨텍스트 생성
  • evtctxdel: type 필드 값이 recv인 경우 이벤트 컨텍스트 삭제

두 명령문 모두 이벤트 컨텍스트 조건이 발생하면 토픽 주제인 txmatch와 이벤트 컨텍스트 키 필드인 txkey를 묶어서 이벤트 컨텍스트를 구분합니다.

이제 다음과 같은 이벤트 데이터가 입력으로 전달된다고 하면,

json "{'txkey':'001122', 'type':'send'}"
json "{'txkey':'001122', 'type':'recv'}"

첫번째 데이터가 입력되면 이벤트 컨텍스트가 생성됩니다. 두 번째 데이터의 입력 시간에 따라 서로 다른 이벤트가 발생합니다.

  • 10초 안에 입력되면 이벤트 컨텍스트 삭제 (EventCause.REMOVAL) 이벤트
  • 10초가 지난 후 입력하거나, 입력하지 않으면 타임아웃 (EventCause.TIMEOUT) 이벤트

발생한 이벤트 컨텍스트의 삭제 원인에 따라 후속 명령으로 서로 다른 처리를 수행할 수 있습니다.