본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


AsterixDB

AsterixDB 테스트용 환경 구축 - 2 (AsterixDB Query)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 11. 1.

 

 

아스트릭스db에서 쿼리문은 일반 SQL문과 거의 동일한 것 같다.

조회, 그룹, 등록, 삭제 등 대부분이 기존 SQL문을 잘 알고 있다면 손쉽게 사용 가능 하였다.

간단한 쿼리문 동작 테스트를 위해 샘플 TYPE과 DATASET을 만들어 보았다.

CREATE TYPE NEW_TYPE AS{
    text : string,
    number : int,
    types: string
};

CREATE DATASET NEW_TYPE_SET(NEW_TYPE) PRIMARY KEY number;

INSERT INTO NEW_TYPE_SET([
  {"number":1, "text":"GOOD" ,"types":"A"},
  {"number":2, "text":"BYE BYE" ,"types":"B"},
  {"number":3, "text":"YES" ,"types":"A"},
  {"number":4, "text":"QUDTLSDLTPWJD" ,"types":"B"},
  {"number":5, "text":"AAA_AAA" ,"types":"A"},
  {"number":6, "text":"HelloWorld" ,"types":"A"}
]);

 

별거 없는 코드이다. 조회는 저번처럼 SELECT로 가능하다.

그냥 동작시키기 뭐 해서 WHERE절에 조건을 주어 보았다.

조건절이 잘 동작한다!!

 

 

뭐..훌륭하게 잘 동작하는 것 같다. 심지어 Join도 허용하여준다.

 

물론 통계같은 기능을 위한 Group도 가능하다.

재미있는 점은 grouping을 할 때 그룹할 항목말고 전체를 지목하면 전체를 자동으로 그룹핑 하여 준다.

일반sql에서는 오류가난다. 왜냐하면 그룹핑해서 가져오는 대상을 전부(*)로 줄 수없기 때문 이다.

 

그런데 왠만한 SQL문법이 잘 작동 하였다고 생각했는데..UPDATE에서 조금 당황하였다.

에러?

 

아스트릭스db에서는 안타깝게도 순수 UPDATE동작은 지원되지 않는다고 나와있다.

https://ci.apache.org/projects/asterixdb/sqlpp/primer-sqlpp.html

 

대신에 UPDATE말고 비슷한 기능인 UPSERT 라는 기능이 있는데 있으면 UPDATE 없으면 INSERT의 개념이라 볼 수 있다.

아래 쿼리를 만들어서 동작시켜 보았다.

USE TEST_DB;
UPSERT INTO NEW_TYPE_SET (
    SELECT 'change' as text, number, types FROM NEW_TYPE_SET WHERE number=6
);

 

select 'change' as text로 된 부분이 내가 바꿀 데이터 부분이다.

즉, select해서 있으면 조회한 항목으로 업데이트, 없으면 등록이 실행 된다.

요렇게 업데이트 성공!

 

 

limit나 distinct 등 왠만한 질의문이 잘 동작 하였다.

이제 외부에서 데이터를 변동한 내용을 아스트릭스db에 전달하는 일만 남은 것 같다.

버전이 낮았을때 아스트릭스db에서는 get방식으로 요청을 받아 쿼리를 수행하고 결과를 되돌려 주는 기능이였다면, 지금 아스트릭스db에서는 post방식으로 요청하는 것으로 바뀌었다.      * 2019.11.11 기준

 

괜히 get방식으로 요청해서 응답결과 404를 보지 않도록 해야 한다. post방식으로 요청하여야 하며, 해당 방법은 아래 공식 사이트에 잘 나와 있다.

https://ci.apache.org/projects/asterixdb/api.html

 

 

다음번에는 Java를 통해서 아스트릭스db에 질의문을 전달하고, 결과를 받는 기능에 대해서 작성하여 보겠다.

 

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글