Day 09: 資料完整性大檢查
Day 9:發現資料庫是空的那一刻
今天做了一件很重要的事:檢查資料有沒有真的寫進資料庫。
結果發現...慘了,好幾個表都是空的。
看來要花一整天來修了。
今天做了什麼
ETL 資料持久化修復(緊急搶修!)
嚴重問題發現
ETL 跑完了,但好幾個資料表的資料都沒寫進去!
⚠ 發現的具體問題:
• MarketDaily - 資料不完整
• StockInfo - PER 資料缺失
• ChipsAnalysis - 完全沒有資料
• SentimentHistory - 表根本沒實作
AI 的系統化修復方案:
-
修改
FinMindClient• 新增 PER 資料抓取功能 -
擴充
crud.py• 實作所有表的 upsert 方法 •StockInfo的更新邏輯 •SentimentHistory的資料庫操作 -
重構
run_etl_v2.py• 修正 Weekly Healer 模式的寫入邏輯 • 確保法人買賣、融資融券數據正確儲存 • 加入技術指標的持久化 -
更新
main.py• 加入SentimentHistory的儲存邏輯 -
撰寫測試腳本驗證 • 自動檢查所有表的資料 • 確認修復生效
所有問題修復完成!
整合股東分散表(重要功能!)
發現資料缺口
ChipsAnalysis 的 concentration_ratio(集中度)和 retail_ratio(散戶比例)一直是 NULL!
AI的完整解決方案:
1. 找到資料源 • TDCC(集保中心)開放資料 CSV • 每週日 18:00 後更新
2. 資料庫設計
建立新的 ShareholderDistribution 表:
• total_shareholders (總股東數)
• avg_shares_per_holder (平均持股)
• top_holders_ratio (大戶比例)
• mid_tier_ratio (中實戶比例)
• tdcc_data_date (資料日期)
3. ETL 整合 • 加入 Weekly Healer 模式 • 安排週日執行 • 儲存歷史資料供長期分析
功能完成 - 現在有完整的籌碼集中度資料!
晚上 10:43 - Zeabur 部署大作戰(最困難的環節!)
部署的大挑戰
Zeabur 的 cron jobs 不執行,Telegram 通知也收不到!
😓 遇到的困難:
• zeabur.yaml 的排程語法問題
• 環境變數設定複雜
• 時區差異導致執行時間錯亂
• 服務重啟時機不明確
AI 的兩階段解決方案:
短期方案: • 協助手動觸發 ETL • 確認基本功能運作
長期方案:
• 將排程整合到 main.py
• 使用 APScheduler 自主控制
• 不再依賴 Zeabur 的 cron
• 自己掌控執行時間
建立更可靠的自動化方案
😅 今天踩的坑
1. 資料寫了但沒存進去
教訓:不能只看程式沒報錯,一定要驗證資料庫內容
2. 雲端環境的複雜性
教訓:Zeabur 的 cron 不可靠,要自己掌控排程邏輯
3. 時區設定問題
教訓:台灣時間要明確指定,不能依賴預設
今天學到的
技術知識 • 資料持久化的完整流程 • TDCC 開放資料的使用 • APScheduler 排程設計 • Zeabur 部署的限制與解決方案
系統思維 • 資料完整性驗證的重要性 • 雲端部署要設計獨立的自動化方案 • 測試腳本是必要的
AI 協作價值 • 系統化找出問題 • 從短期到長期的解決方案 • 建立驗證機制
明天計畫 • [ ] 系統優化 • [ ] 網站專案規劃 • [ ] 資料更新流程確認
💬 今日金句
"資料有沒有真的寫進資料庫,一定要驗證!不能只看程式沒報錯。"
累計進度 • 完成功能:資料持久化修復、股東分散表、自動化排程 • 資料表數量:+1 個 • ⏰ 累計開發時數:78 小時 • 🔖 今日標籤:#資料完整性 #股東分散表 #Zeabur部署 #APScheduler
🔖 #11天打造AI股票分析系統 #AI開發 #學習紀錄
這是我 55 歲轉職 AI 開發的第 9 天筆記。 如果這篇文章對你有啟發,歡迎留言與我交流。
留言討論 (開發中...)
留言功能即將啟動,敬請期待與 AI 的深度互動。