๋ฐ์ดํฐ ๋ถ์ ํ๊ฒฝ ๊ตฌ์ถ - 10. Streamlit, Clickhouse๋ก ์ค์๊ฐ ๋์๋ณด๋ ๊ตฌํ ๐จ(part. 1)
์ด๋ฒ ๊ธ์์๋ ์ง๊ธ๊น์ง ๊ตฌ์ถํ๋ Clickhouse ์ธํ๋ผ์ Streamlit์ ์ฐ๊ฒฐํ์ฌ ์ค์๊ฐ ๋์๋ณด๋๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
์ฒซ๋ฒ์งธ ํํธ๋ก Streamlit ๋ด Clickhouse ์ฐ๊ฒฐ ํจํค์ง ์ค์น์ ๋ฐ์ดํฐ ์กฐํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
- Clickhouse ์ค์๊ฐ ๋ถ์ ํ ์ด๋ธ ์์ฑ(https://jongwho.tistory.com/26)
๋ฐ์ดํฐ ๋ถ์ ํ๊ฒฝ ๊ตฌ์ถ - 05. Clickhouse ์ค์๊ฐ ๋ฐ์ดํฐ ๋ถ์ ํ ์ด๋ธ ์์ฑํ๊ธฐ
๐ ์ด ๊ธ์์ ๋ค๋ฃฐ ๋ด์ฉ1๏ธโฃ Kafka์ ์ฐ๊ฒฐ๋ ClickHouse ํ ์ด๋ธ ์์ฑ (ํ๊ฒฝ์ค์ ํฌํจ)2๏ธโฃ ์ค์ต์ฉ ๋ฐ์ดํฐ์ kafka produce3๏ธโฃ Kafka ํ ์ด๋ธ์์ ๋ฐ์ดํฐ ์ ํ์ธ ๋ฐฉ๋ฒ1. Kafka์ ์ฐ๊ฒฐ๋ ClickHouse ํ ์ด๋ธ ์
jongwho.tistory.com
- Streamlit ์๊ฐ ๋ฐ ์ค์น(https://jongwho.tistory.com/31)
๋ฐ์ดํฐ ๋ถ์ ํ๊ฒฝ ๊ตฌ์ถ - 09. Streamlit ์๊ฐ ๋ฐ ์ค์น, ์ค์ ํ์ ์ฌ์ฉ๊ธฐ
์ด์ ์ ์๊ฐํ๋ Clickhouse์์ ์ค์๊ฐ ๋ฐ์ดํฐ ๋ถ์์ ์ํด๋์๋ณด๋๋ฅผ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์๋ Streamlit ์๋น์ค์ ๋ํด ์๊ฐํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ์ค์ ํ์ ์์ Streamlit์ผ๋ก ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ ํ๊ธฐ
jongwho.tistory.com
1๏ธโฃ ์ค์น ์ค๋นํ๊ธฐ
์ฐ์ Streamlit๊ณผ Clickhouse-connect๋ฅผ ์ค์นํฉ๋๋ค.
pip install streamlit
pip install clickhouse-connect
- streamlit: ๋์๋ณด๋ ํ๋ ์์ํฌ
- clickhouse-connect: Python์์ ClickHouse์ ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ ๋๋ผ์ด๋ฒ
โ ClickHouse ์๋ฒ๋ ๋ก์ปฌ์ด๋ , Docker๋ , ํด๋ฌ์คํฐ๋ ์๊ด์์ด์. ๋จ, HTTP ํฌํธ(๊ธฐ๋ณธ 8123) ๊ฐ ์ด๋ ค ์์ด์ผ ํฉ๋๋ค!
๊ธฐ์กด์ kubernetes์ ์ค์นํ clickhouse ์๋น์ค์ ๋ํด port-forward ๋ช ๋ น์ด๋ฅผ ํตํด ํฌํธ๋ฅผ ์ด์ด์ค๋๋ค.
kubectl port-forward svc/clickhouse 8123:8123 -n clickhouse
2๏ธโฃStreamlit์์ ClickHouse ์ฐ๊ฒฐํ๊ธฐ
์๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ClickHouse ์ฐ๊ฒฐ ์ฝ๋์์.
# clickhouse_demo.py
import streamlit as st
from clickhouse_connect import get_client
import pandas as pd
# ClickHouse ์ ์ ์ ๋ณด
client = get_client(
host="localhost", # ๋๋ EC2, ๋์ปค ๋ด๋ถ IP
port=8123,
username="admin",
password="",
secure=False, # https๊ฐ ์๋๋ผ๋ฉด False
)
# SQL ์คํ
query = """
select *
from regular_db.distributed_replicated_table
LIMIT 100
"""
data = client.query_df(query)
# Streamlit UI
st.title("๐ ์ค์๊ฐ ์ด๋ฒคํธ ๋ก๊ทธ (ClickHouse)")
st.dataframe(data)
streamlit run clickhouse_demo.py
โ ์คํํ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ๋์๋ณด๋๊ฐ ๋น๋๋ค! (๊ธฐ๋ณธ ํฌํธ๋ localhost:8501์ด์์.)
3๏ธโฃ ์ด๋ค ๋์๋ณด๋๋ก ํ์ฅํด๋ณผ ์ ์์๊น?
์ผ๋จ ์ง๊ธ์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ์ง๋ง, Streamlit๊ณผ ClickHouse๋ฅผ ๋ถ์ด๋ฉด ์ ๋ง ๋ค์ํ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
- ์๊ฐ ํํฐ (๊ธฐ๊ฐ๋ณ ์กฐํ)
- ์ด๋ฒคํธ ์ ํ ํํฐ
- ์ฐจํธ(Line, Bar)๋ก ์๊ฐํ
- ์ค์๊ฐ ์๋ ์๋ก๊ณ ์นจ
- ์ฌ์ฉ์ ์ธ์ ๋ถ์
๋ค์ ํธ์ธ Part 2์์๋
๐ Kafka๋ก ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ClickHouse์ ์ ์ฅํ๊ณ
๐ ๊ทธ๊ฑธ Streamlit์์ ๊ฑฐ์ ์ค์๊ฐ์ผ๋ก ์๊ฐํํ๋ ํ๋ฆ์ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.