概要
カテゴリー補完ページ(1_カテゴリ補完.py)の fetch_categories() 関数が BigQuery の category_master テーブルをクエリしているが、このテーブルは dbt seed で管理されており、ローカルの analytics/seeds/category_master.csv と内容が一致している。
BigQuery を叩かずにローカルCSVを直接読み取る実装に変更し、不要なBQコストと遅延を削減する。
現状
analytics/webui/pages/1_カテゴリ補完.py の fetch_categories():
@st.cache_data(ttl=300)
def fetch_categories():
sql = f"""
SELECT category_name_small
FROM `{categoryMst}`
ORDER BY countif desc
"""
return [r["category_name_small"] for r in bq.query(sql).result()]
改善案
analytics/seeds/category_master.csv を Streamlit アプリから直接 pandas.read_csv() で読み取る
- BQクライアントの初期化・クエリが不要になる(カテゴリー取得の目的のみでBQクライアントを使っている場合は削除可能)
@st.cache_data はそのまま活用してファイル再読み取りを抑制する
- dbt seed で CSV が更新されたらアプリ再デプロイ(または
cache_data の TTL)で反映される
メリット
- BQクエリコストの削減
- ページ初回ロードの高速化
- BQ接続失敗時の影響範囲を縮小
対象ファイル
analytics/webui/pages/1_カテゴリ補完.py
analytics/deploy/streamlit/pages/1_カテゴリ補完.py(sync後)
概要
カテゴリー補完ページ(
1_カテゴリ補完.py)のfetch_categories()関数が BigQuery のcategory_masterテーブルをクエリしているが、このテーブルは dbt seed で管理されており、ローカルのanalytics/seeds/category_master.csvと内容が一致している。BigQuery を叩かずにローカルCSVを直接読み取る実装に変更し、不要なBQコストと遅延を削減する。
現状
analytics/webui/pages/1_カテゴリ補完.pyのfetch_categories():改善案
analytics/seeds/category_master.csvを Streamlit アプリから直接pandas.read_csv()で読み取る@st.cache_dataはそのまま活用してファイル再読み取りを抑制するcache_dataの TTL)で反映されるメリット
対象ファイル
analytics/webui/pages/1_カテゴリ補完.pyanalytics/deploy/streamlit/pages/1_カテゴリ補完.py(sync後)