오픈 소스 BI툴인 아파치 슈퍼셋은 에어비엔비에서 제작 후 오픈 소스로 공개했다. 타블러 같은 BI툴의 오픈 소스 버전이라고 생각하면 된다.
아파치 라이센스 2.0을 사용하기 때문에 상업적인 사용 및 독자적인 특허권 및 상용 서비스 등도 가능하다. 수정시에도 소스 코드 공개 의무가 없지만 해당 S/W 사용했고 수정했음을 외부에 밝혀야 한다.

아파치 슈퍼셋의 장점은?
- 자체 개발없이 빠르게 외부에 시각화 대시보드를 제공할 수 있다.
- 사용 BI 툴 수준의 시각화 기능 지원
- 대부분의 DB 커넥터 연결을 지원
- 빅쿼리 실제 연결되는지 테스트 완료
- 유저 권한 관리 지원
- 외부 회사에 제공시에 필요함
아파치 슈퍼셋의 단점은?
- 여러가지 라이브러리가 복잡하게 얿혀있어 소스를 수정하려면 경험많은 개발자가 필요하다.
- 프론트엔드는 react 프레임워크 경험자가 필요
- 모바일 앱을 통해 대시보드 뷰어는 그냥 따로 개발해야 한다.
Superset 설치
vmware에서 ubuntu 20.04 버전을 이용하 설치 과정을 테스트해보았다. 설치 과정은 슈퍼셋 홈페이지(https://superset.incubator.apache.org/installation.html)를 참고하였다. 문서와 틀린점은 ubuntu 20.04의 기본 패키지 서버에서 설치할 수 있는 파이썬 버전 3을 사용한다는 점이다.
슈퍼셋에 필요한 기본 패키지를 먼저 설치한다.
sudo apt-get install build-essential libssl-dev libffi-dev libsasl2-dev libldap2-dev

파이썬 관련 패키지를 설치한다. 파이썬 가상환경을 제공하는 virtualenv 내부에 Superset를 설치하는 것이 좋다.
sudo apt-get install python3-pip, python3-venv

sudo pip3 install virtualenv

다음 커맨드를 입력을 통해 파이썬 virtualenv를 만들고 활성화 할 수 있다.
sudo python3 -m venv venv . venv/bin/activate
이 예제에서는 빅쿼리와의 연동을 테스트하는게 목적이다. deactivate 커맨드를 입력하여 virtualenv를 비활성화한다. 좌측에 (venv) 표시가 사라지는 것을 확인할 수 있다.

이제 Superset 패키지를 설치한다.
sudo pip3 install apache-superset
Superset db를 초기화하고 서버를 실행한다.
sudo superset db upgrade
어드민 계정을 생성한다. 어드민으로 사용한 정보와 암호를 입력하면 된다.
sudo superset fab create-admin

예제 데이터를 생성한 후 슈퍼셋 권한과 역할 정보 생성을 위한 init 커맨드를 입력한다.
sudo superset load_examples sudo superset init

이제 슈퍼셋 실행에 준비가 모두 완료되었다. 다음 커맨드를 입력하여 슈퍼셋 서버를 시작한다
sudo superset run -p 8088 --with-threads --reload --debugger

웹브라우저를 실행한 후 127.0.0.1:8080을 통해 슈퍼셋 웹페이지에 들어갈 수 있다. 전에 생성해둔 어드민 계정 정보를 입력하여 로그인한다.

예제 데이터를 이용하여 만들어진 각종 도표를 확인할 수 있다.

BigQuery 차트 출력
슈퍼셋에서 빅쿼리 데이타에 접근할려면 추가 패키지를 설치해야 한다.
sudo pip3 install pybigquery

이제 커넥터 패키지가 설치되었으니 연결한 빅쿼리 정보를 추가해야 한다. Superset의 Sources > Databases 메뉴를 선택한다.

GCP 사이트에서 접근할 빅쿼리의 프로젝트 아이디를 복사해온다. 그리고 SQL Alchemy URI에 입력한다.


빅쿼리에 접근하려면 해당 빅쿼리에 접근 권한을 허용한 GCP 서비스어카운트 json 파일이 필요하다. GCP 사이트에서 다운로드 받으면 다음과 같은 속성을 확인할 수 있다.

Extra 속성에는 다음을 입력한다.
{ "metadata_params": {}, "engine_params": {}, "metadata_cache_timeout": {}, "schemas_allowed_for_csv_upload": [] }
그리고 Secure Exter 항목에 다음 서비스어카운트 json 파일에 담긴 모든 내용을 복사한후 credentials_info 속성에 추가한다.
{ "credentials_info" : { "type": "...", "project_id": "...", .... "client_x509_cert_url": "..." } }

화면 하단의 Save 버튼을 클릭하여 저장하면 다음과 같이 데이터베이스 소스에 빅쿼리 커넥터가 추가된 것을 확인할 수 있다.

이제 빅쿼리 테이블에 접근하여 데이터를 출력하는 대시보드를 추가해보자. Superset 메뉴중 Dashboards를 선택한 후 화면 우측에 + 버튼을 클릭한다.

대시보드 이름을 이력하고 Owners를 어드민 유저로 선택한 후 Save 버튼을 클릭한다.

빅쿼리 정보에 접근하려면 접근할 테이블 정보를 추가해야 한다. Superset 메뉴 Sources > Tables를 선택한다.

화면 우측 + 버튼을 클릭하여 테이블 정보를 입력한다

Database 속성을 선택해서 빅쿼리 데이터베이스 소스를 선택한다. 그리고 Table Name에 접근할 테이블 이름을 입력한 후 Save 버튼을 클릭한다. 테이블 이름은 {BIGQUERY_DATASET}.{BIGQUERY_TABLE_NAME} 형식을 가진다.


대시보드에 해당 테이블 정보를 출력하려면 미리 차트 정보를 생성해야 한다. Superset 메뉴 Charts를 선택한후 화면 오른쪽 + 버튼을 클릭한다.

데이타소스를 바로 전에 생성한 테이블 정보로 선택한다.

그리고 Choose a visualization type 메뉴를 통해 표시하고 싶은 차트 방식 선택한다(이 글에서는 Line Chart를 선택) 그리고 Create new chart 버튼을 클릭한다.

이제 해당 테이블을 대상으로 어떻게 차트 정보를 출력할지 편집할 수 있다. Superset이 상용 BI툴과 견줄 수 잇는 부분중의 하나가 이런 비주얼한 편집 기능이다.

화면 좌측의 Run Query를 통해 결과를 확인해가며 원하는대로 차트가 출력되는지 확인해 가면 편집할 수 있다. Save 버튼을 클릭하여 차트 정보를 저장한다.

이제 대시보드에 차트를 추가해보자. Dashboards 메뉴에서 생서한 대시보드를 선택한다. 그리고 Edit dashboar 버튼을 클릭한다.

Your charts & filter 메뉴를 선택한다.

좀전에 추가한 차트인 daily step이 표시되는 것을 확인할 수 있다. 해당 표를 클릭 후 드래그하여 대시보드에 배치한다.



마무리
Superset에서 빅쿼리 테이블과의 연동이 이상없이 동작하는 것을 확인했다. 이 글은 빅쿼리와 연동을 확인하려는 것으로 파이썬 virtualenv를 사용하지 않았고 Superset 서버도 데몬 형태로 실행하지 않았다는 점에 주의하기 바란다.