'데이터 엔지니어'로 성장하기

정리하는 걸 좋아하고, 남이 읽으면 더 좋아함

Data/Superset

Supserset) 슈퍼셋 들어보셧나요? 사용 후기 듣고 가세요! (filter 조건 위치 변경해서 full scan 방지)

MightyTedKim 2023. 3. 26. 23:24
728x90
반응형

요즘 '빅데이터 지탱하는 기술' 보고 있는데,  superset이 나와서 정리해봣어요

예상 독자는 아래와 같아요
- superset 사용하시려는 분
- 기본 구조를 아시고 싶으신 분
- filter를 where절 안에서 사용하고 싶으신분
 
저는 k8s helm을 이용해서 구현했어요
사용 방법은 kibana와 비슷해서 편했고, 저는 trino를 데이터 소스로 사용했어요


superset이란?

- airbnb(2016)에서 만든 BI 툴
- 사용자 친화적인 UI

데모 페이지 들어가면 볼 수 있어요
https://superset.demo.datahubproject.io/superset/welcome/

Superset

superset.demo.datahubproject.io

느낀 장/단점

장점
- 공짜
- 연결할 데이터 소스가 많음
- 커뮤니티에서 핫함 (빠른 버전업)
 
단점
- 생각보다 러닝커브가 있음
- 업데이트가 너무 빠름(구조가 자주 바뀌는 듯?)
 

대표 기능

 
1. database -> 데이터 연결
2. dataset -> 연결된 데이터의 특정 테이블을 객체화시킴
3. charts -> 시각화
4. dashboard -> chart를 모음
5. SQL lab -> data 조회 가능 
 

이제 사용 썰이에요

- helm 으로 설치해서 그런지, 처음 시작은 아주 간단
- database 등록도 쉬움

- database 신규 추가도 쉬움 (pip만 되면 가능함)

 
- sql lab의 데이터 조회 기능이 아주 좋음 (web dbeaver 같음)

- chart기능도 좋음 (키바나 같음)

 
- filter 조건 where 절 위치 변경 가능할까? -> 가능!

책보면서 궁금해하다가, 설치해봣어요

대용량 데이터 filter 조건시 커스터마이징하는 방법을 찾아봤어요
예를 들어서, tbl_test에 아주 큰 데이터가 있다고 가정하고,아래처럼 조회하고 싶어요

select col_code 
 from tbl_test
WHERE col_code IN ('A100',  'A101')

그런데 filter 조건을 dashboard에서 만들면, 이렇게 나와요
- full scan 후 조건 절이 적용

SELECT col_code  AS col_code  
FROM (

  select col_code 
   from tbl_test
) AS virtual_table
WHERE col_code IN ('A100',  'A101')
LIMIT 1000;

커스터마이징을 하기 위해서는, chart에서 edit dataset을 눌러줘요

사진은 참고

자물쇠 모양을 클릭하면, 강제로 수정할 수 있는데 아래 코드를 입력해줘요

select col_code 
  from tbl_test
 where col_code in ({{ "'" + "','".join (filter_values('col_code_filter')) + "'" }} )

 
그러고 dashboard 로 돌아가면, 아무 필터를 걸지 않을 경우는 아래처럼 나와요
 

SELECT col_code AS col_code  
FROM  (

select col_code 
   from tbl_test
   where col_code in ('')

) AS virtual_table
LIMIT 1000;

필터를 적용했을 경우는 아래처럼 나와요

SELECT col_code  AS col_code  
FROM (

  select col_code 
   from tbl_test
   where col_code in ('A100',  'A101')

) AS virtual_table
WHERE col_code IN ('A100',  'A101')
LIMIT 1000;

sql lab에서 test 할 수도 있어요 
copy link 옆의 dropdown에서 parameter를 선택하고, dashboard에서 입력될 값을 입력해줘요

{ "_filters": [ { "col": "col_code_filter ", "op": "IN", "val": ["A100", "A101"] } ] }

그러면 아래 코드가 필터값을 그대로 적용해줄거에요

select col_code
  from tbl_test
where col_code in ({{ "'" + "','".join (filter_values('col_code_filter')) + "'" }} )

 
현업분들이 사용하기에는 dataset, edit data, chart 의 프로세스가 좀 어려워요.
뿐만 아니라 비용을 생각하지 않은 쿼리를 짜서 적용하면 부하가 어마어마할 것 같고요 
 
다만, 권한관리와 대시보드 생성 목적을 명확히 한다면 아주 좋은 툴 같아요!

참고

https://tedparkdev.tistory.com/8
https://velog.io/@syh0397/0.-%EC%8A%88%ED%8D%BC%EC%85%8B%EC%9D%B4%EB%9E%80Apache-Superset
https://superset.apache.org/docs/installation/sql-templating/

728x90
반응형