2016-08-27 7 views
0

실행 계획에서 메모리 내장 테이블을 사용하고 있지만 컴파일러가 해당 정의를 묻습니다. 쿼리는WSO2CEP : ID가있는 스트림/테이블 정의가 실행 계획에 정의되지 않았습니다.

@Import('MAINInStream:1.0.0') 
define stream MAINInStream (ts string, uid string, id_orig_h string, id_orig_p int, id_resp_h string, id_resp_p int, proto string, service string, duration double, orig_bytes long, resp_bytes long, conn_state string, local_orig bool, local_resp bool, missed_bytes long, history string, orig_pkts long, orig_ip_bytes long, resp_pkts long, resp_ip_bytes long, tunnel_parents string, sensorname string); 

@Export('ProtocolStream:1.0.0') 
define stream ProtocolStream (protocol string, count int); 

@from(eventtable = 'rdbms' , datasource.name = 'WSO2_CARBON_DB' , table.name ='conn_log_table') 
define table conn_log_table (ts string, uid string, id_orig_h string, id_orig_p int, id_resp_h string, id_resp_p int, proto string, service string, duration double, orig_bytes long, resp_bytes long, conn_state string, local_orig bool, local_resp bool, missed_bytes long, history string, orig_pkts long, orig_ip_bytes long, resp_pkts long, resp_ip_bytes long, tunnel_parents string, sensorname string); 

define table mem_conn_table (timestamp string, id_orig_h string, id_orig_p int, id_resp_h string, id_resp_p int, proto string); 

from MAINInStream 
select * 
insert into conn_log_table; 

from MAINInStream 
select time:dateAdd(str:replaceAll(ts,'T',' '), 5, 'hour',"yyyy-MM-dd HH:mm:ss") as timestamp, id_orig_h, id_orig_p, id_resp_h, id_resp_p, proto 
insert into mem_conn_table; 

from mem_conn_table[time:dateDiff(time:currentTimestamp(), timestamp, "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss") == 0] 
SELECT (ifThenElse(id_resp_p == 21,'FTP', ifThenElse(id_resp_p == 22,'SSH', ifThenElse(id_resp_p == 25,'SMTP', ifThenElse(id_resp_p == 445,'SMB','MYSQL'))))) as protocol , count() as count 
insert into ProtocolStream; 

입니다. mem_conn_table은 마지막 쿼리를 추가 할 때 시작되는 문제의 원인입니다.

답변

0

잘못된 방법으로 이벤트 테이블을 사용하고있었습니다. 그것을 사용하기 위해서는 입력 스트림과 적당한 길이의 윈도우를 결합해야한다.