Redash로 데이터 시각화하기
Redash로 데이터 시각화하기
Redash를 사용해 Apache Pinot의 데이터를 시각화하는 방법을 알려드려요.
출처: 문서
본문
- Docker 기반 개발자 설치 가이드를 따라 Redash를 설치하고 실행 중인 인스턴스를 시작하세요.
- 다음을 수행해 Redash가 Pinot을 쿼리하도록 구성하세요:
- 다음을 수행해 시각화를 만드세요:
pinot db 의존성 추가 (Add pinot db dependency)
Apache Pinot은 Python 애플리케이션에서 Pinot을 쿼리하기 위한 Python 클라이언트 라이브러리 pinotdb를 제공해요. Redash worker 인스턴스 안에 pinotdb를 설치해 Pinot에 네트워크 호출을 하게 해요.
- Redash를 클론한 루트 디렉터리로 이동하세요. 다음 명령으로 Redash worker 컨테이너 이름을 가져오세요(기본적으로
redash_worker_1):
docker-compose ps
- 다음 명령을 실행하세요(해당되면
redash_worker_1을 자신의 Redash worker 컨테이너 이름으로 변경):
docker exec -it redash_worker_1 /bin/sh
pip install pinotdb
- Docker를 다시 시작하세요.
Pinot용 Python 데이터 소스 추가 (Add Python data source for Pinot)
- Redash에서 Settings > Data Sources를 선택하세요.
- New Data Source를 선택한 다음 목록에서 Python을 선택하세요.
- Redash Settings - Data Source 페이지에서 데이터 소스 이름으로
Pinot을 추가하고, Modules to import prior to running the script 필드에pinotdb를 입력하세요. - 필요에 따라 다음 선택 필드를 입력하세요:
- AdditionalModulesPaths: Redash에서 쿼리할 때 사용할 수 있도록 Redash 서버의 Python 모듈 절대 경로를 쉼표로 구분해 입력하세요.
pip에서 사용할 수 없는 개인 모듈에 유용해요. - AdditionalBuiltins: 필요에 따라 추가 내장 함수를 지정하세요. 기본적으로 Redash는 Python 내장 함수 25개를 자동으로 포함해요.
- AdditionalModulesPaths: Redash에서 쿼리할 때 사용할 수 있도록 Redash 서버의 Python 모듈 절대 경로를 쉼표로 구분해 입력하세요.
- Save를 클릭하세요.
Pinot 시작 (Start Pinot)
새 터미널에서 다음 명령을 실행해 내장된 baseball stats 데이터셋과 함께 quick start 모드로 Apache Pinot Docker 컨테이너를 띄우세요.
docker run \
--name pinot-quickstart \
-p 2123:2123 \
-p 9000:9000 \
-p 8000:8000 \
apachepinot/pinot:1.5.1 QuickStart -type batch
Redash에서 쿼리 실행 (Run a query in Redash)
- Redash에서 Queries > New Query를 선택하고, Pinot용 Python 데이터 소스 추가에서 만든 Python 데이터 소스를 선택하세요.
- 데이터를 쿼리하는 Python 코드를 추가하세요. 자세한 내용은 Python query runner를 참고하세요.
- Execute를 클릭해 쿼리를 실행하고 결과를 확인하세요.
Pandas 같은 라이브러리를 포함해 Pinot의 데이터에 대한 더 고급 데이터 조작을 수행하고 Redash로 출력을 시각화할 수도 있어요.
자세한 내용은 Redash 문서의 Querying을 참고하세요.
예시 Python 쿼리 (Example Python queries)
총 득점 기준 상위 10개 선수 쿼리
다음 쿼리는 Pinot에 연결해 baseballStats 테이블에서 가장 높은 점수를 가진 상위 열 명의 선수를 조회해요. 결과는 Redash가 지원하는 사전 형식으로 변환돼요.
from pinotdb import connect
conn = connect(host='host.docker.internal', port=8000, path='/query/sql', scheme='http')
curs = conn.cursor()
curs.execute("""
select
playerName, sum(runs) as total_runs
from baseballStats
group by playerName
order by total_runs desc
limit 10
""")
result = {}
result['columns'] = [
{
"name": "player_name",
"type": "string",
"friendly_name": "playerName"
},
{
"name": "total_runs",
"type": "integer",
"friendly_name": "total_runs"
}
]
rows = []
for row in curs:
record = {}
record['player_name'] = row[0]
record['total_runs'] = row[1]
rows.append(record)
result["rows"] = rows
총 득점 기준 상위 10개 팀 쿼리
from pinotdb import connect
conn = connect(host='host.docker.internal', port=8000, path='/query/sql', scheme='http')
curs = conn.cursor()
curs.execute("""
select
teamID, sum(runs) as total_runs
from baseballStats
group by teamID
order by total_runs desc
limit 10
""")
result = {}
result['columns'] = [
{
"name": "teamID",
"type": "string",
"friendly_name": "Team"
},
{
"name": "total_runs",
"type": "integer",
"friendly_name": "Total Runs"
}
]
rows = []
for row in curs:
record = {}
record['teamID'] = row[0]
record['total_runs'] = row[1]
rows.append(record)
result["rows"] = rows
연도별 총 삼진 쿼리
from pinotdb import connect
conn = connect(host='host.docker.internal', port=8000, path='/query/sql', scheme='http')
curs = conn.cursor()
curs.execute("""
select
yearID, sum(strikeouts) as total_so
from baseballStats
group by yearID
order by yearID asc
limit 1000
""")
result = {}
result['columns'] = [
{
"name": "yearID",
"type": "integer",
"friendly_name": "Year"
},
{
"name": "total_so",
"type": "integer",
"friendly_name": "Total Strikeouts"
}
]
rows = []
for row in curs:
record = {}
record['yearID'] = row[0]
record['total_so'] = row[1]
rows.append(record)
result["rows"] = rows
Redash에 시각화와 대시보드 추가 (Add a visualization and dashboard in Redash)
시각화 추가 (Add a visualization)
Redash에서 쿼리를 실행한 후 New Visualization 탭을 클릭하고 만들고 싶은 시각화 유형(예: Bar Chart)을 선택하세요. 차트가 있는 Visualization Editor가 나타나요.
예를 들어 가장 높은 점수를 가진 상위 10명의 선수를 볼 수 있는 막대 차트를 만들고 싶을 수 있어요.
시간 경과에 따른 삼진의 전체 변화를 보기 위한 꺾은선 차트를 만들고 싶을 수도 있어요.
자세한 내용은 Visualizations를 참고하세요.
대시보드 추가 (Add a dashboard)
하나 이상의 시각화(위젯)로 대시보드를 만드세요.
- Redash에서 Dashboards > New Dashboards로 이동하세요.
- 대시보드에 위젯을 추가하세요. 예를 들어 위 세 가지 예시 쿼리의 시각화 세 개를 추가하면 Baseball stats 대시보드를 만들 수 있어요.
자세한 내용은 Redash 문서의 Dashboards를 참고하세요.