ksqlDB : ksqlDB의 쿼리 종류

    들어가기 전

    ksqlDB는 카프카의 실시간 스트림 처리를 이용해서 실시간 스트림에 관한 데이터를 제공해주는 데이터 베이스 역할을 한다. 따라서 기존의 데이터 베이스와 동일한 형태의 SQL 문을 작성해서 사용할 수 있다. 그렇지만 ksqlDB의 쿼리는 RDBMS의 쿼리와는 조금 다른 점이 있는데 총 세 가지의 쿼리로 나누어진다. 

    • Peristence Query
    • Push Query
    • Pull Query

    세 가지의 쿼리는 위에서 볼 수 있다. Persistence Query과 Pull Query는 RDBMS에서도 봤었던 쿼리일 것이다. 그렇지만 Push Query는 아마 새로운 형태의 쿼리가 될 수 있다. 아래에서 좀 더 자세히 작성할 예정이다. 


    Query 확인

    SHOW QUERIES;

    ksqlDB 클라이언트에서는 동작중인 쿼리를 확인할 수 있다. 쿼리는 위의 명령어를 이용해서 확인할 수 있다.

    위 명령어를 이용하면 현재 ksqlDB에서 동작중인 쿼리를 모두 보여준다.

     


    Persistence Query

    Persistence Query는 쿼리의 결과가 영속화 되는 것을 의미한다. Persistence 쿼리는 기존에 존재하는 스트림에서 새로운 스트림 / 테이블을 생성하는 쿼리를 의미한다. 쿼리의 종류는 CSAS / CTAS가 있다. 

    Persistence Query를 생성하게 되면 Query가 생성되는데, 이것은 DDL 문을 실행해주는 카프카 스트림즈 인스턴스가 하나 생성되는 것을 의미한다. 그리고 생성된 카프카 스트림즈 인스턴스는 Persistence Query 이름의 카프카 토픽을 하나 생성한 뒤 그곳을 Sink Topic으로 해서 메세지를 전송해준다. 

    CREATE TABLE test1  as
    SELECT countrycode, count(*) from USERPROFILE group by countrycode;

    위의 쿼리를 이용하면 새로운 테이블이 생성되고 데이터는 공급된다. 이런 쿼리를 Persistence Query라고 한다. 

     

    Push Query

    https://docs.ksqldb.io/img/ksqldb-push-query.svg

    Push Query는 실시간 상태를 끊임없이 보여주는 쿼리를 의미한다. Push 쿼리는 실시간 스트림에 의해서 처리되고 있는 스트림과 테이블에만 사용할 수 있고, 변화가 생길 때 마다 그 변화를 계속 보여주는 쿼리다.

    SELECT * FROM USERPROFILE EMIT CHANGES;

    Push 쿼리는 다음과 같이 일반적으로 작성한 SQL 문에 EMIT CHANGES라는 문구만 붙여주면 된다. 이렇게 생성된 쿼리는 변화가 생길 때마다 실시간으로 그 변화를 반환해줄 것이다. 

    Push 쿼리는 현재 상태를 나타내는 테이블에도 적절히 사용할 수 있다. 위 이미지는 테이블에 대해 Push 쿼리를 날렸을 때의 결과다. 테이블에서 Key에 대한 Value의 변화가 있을 때 마다 그 값을 실시간으로 반환해주는 역할을 한다. 

     

    Pull Query

    https://docs.ksqldb.io/img/ksqldb-pull-query.svg

    Pull 쿼리는 RDBMS에서 주로 사용하던 쿼리다. Pull 쿼리 역시 스트림과 테이블에 대해서 모두 사용할 수 있다. Pull 쿼리의 결과는 '현재'의 상태만을 의미한다. 스트림이나 테이블에 대해서 가져오게 될 경우, 앞으로의 변화를 가져오지는 않고 현재 어떠한지만을 기술해준다. 사용은 Push 쿼리에서 EMIT CHANGE를 빼주기만 하면 된다.

    SELECT * FROM USERPROFILE

    위와 같이 사용하면 된다. 

    '기타 Tool > SQL' 카테고리의 다른 글

    라인 1차 면접  (0) 2022.04.11
    SQL : SQL 문법의 실행 순서 + On vs Where  (0) 2022.04.02

    댓글

    Designed by JB FACTORY