ksqlDB의 두가지 쿼리 타입인
- Push Query
- Pull Query
에 대하여 정리 해보겠습니다..
1. Push Query
- ksql 서버에서 진행중인 스트리밍 이벤트에 대한 실시간 처리를 요청하는 쿼리
- 연속된 stream을 반환한다.
- 스트리밍 데이터의 변경사항이 발생할 때마다 자동으로 결과를 업데이트 하는 방식
(아래 내용은 하이퍼커넥트 기술블로그에서 참조 했습니다)
Push Query 는 EMIT CHAGES 혹은 EMIT FINAL 구문을 쿼리의 마지막에 붙여줘야 하는데, EMIT CHANGES 를 사용하면 Stream 의 변경 사항들을 연속적으로 반환하는 것이고, EMIT FINAL 은 ‘windowed aggregation’ 에서만 사용할 수 있습니다. 이를 사용하면 ‘마지막’ 윈도우의 결과를 반환해줍니다.
- push 쿼리는 실시간 스트리밍 데이터를 처리하므로 변경사항에 대한 처리가 필요한데 EMIT CHAGES; 쿼리 구문을 보고 push query 임을 알수 있다 (당연한 소리?이다)
EMIT CHAGES;
2. Pull Query
- pull query는 스트리밍 데이터가 아닌, 현재 상태를 기준으로 사용자가 필요할때 쿼리를 통하여 결과를 가져오는 방식이다.
- 특정 시점에서의 상태를 조회할 때 사용한다.
- 일반적인 SQL 조회 쿼리라고 생각하면 쉽다.
- KSQL은 Materialized agg table에서만 pull Query를 지원한다.
- Pull Query 는 반드시 파티셔닝의 기준이 되는 ‘KEY’ 를 기준으로 쿼리를 해야 한다(rowkey). 아래 예제 참고
SELECT * FROM table_name WHERE rowkey=id;
- Pull Query 는 스트림데이터를 다루는 KStream 이나 KTable 에서는 사용할 수 없다!