不同階段有不同的架構
## 1. 匯出法
後台做匯出 CSV 或是 Excel,讓 data team 用 excel 分析
缺點: 因為是即時算,下載慢,若 query 沒寫好,用戶一直做匯出還會倒站
## 2. 自幹法
直接在 Rails 上,產生 json object 搭配前端套件(例如 chart.js),做出表格和圖表
缺點: 資料分析師幫不上忙,都需要工程師來做
## 3. Rails 的 BI gem
在 Rails 上讓資料分析師可以直接寫 SQL 做分析,產生一些報表。例如以下套件:
* https://github.com/ankane/blazer
* https://www.honeybadger.io/blog/blazer-business-intelligence-ruby-on-rails/
缺點:
1. 沒有經過 ETL 程序的話,原始 DB schema 可能不方便分析
2. blazer 畢竟只是 Rails 的 gem,沒有完整的 BI 功能,功能有限
## 4. ETL 進 BI 系統
如果想要資料分析師可以好好幫上忙,就需要安裝獨立的 BI 系統,然後將資料透過 ETL 流程轉過去。
BI 系統有很多家,例如
* Metabase https://www.metabase.com/ (這有 open source 可以自己裝,推薦)
* Amazon QuickSight
* 微軟的 Power BI
* FineBI
* Tableau
看數據量有多大,底層是否要換分析專用的 DB,例如 Amazon Redshift , GCP BigQuery 等,這些 BI 系統應該都有支援。
分析用的 table 和營運用的不同,你需要做 ETL 轉換,不然 SQL 會很難寫,也很不好重用,有兩個方向:
### 一天轉個幾次
這可以自已開發,或是用 gem https://github.com/thbar/kiba 有個遵循的架構。不會太難,就是讀資料然後轉存過去。
### 即時轉
這難度就高了,每次資料變更就立即更新,不但影響production效能,維持資料的一致性難度也很高。
我個人是懷疑沒有這種需求啦,統計性質的報表分析根本不需要即時
如果是業務用,那根本應該做在應用程式上,而不是還要經過ETL進到報表系統再用。
## 5. ELT 進 BI 系統
這是最近比較新的方式,更進一步不需要工程師來寫 ETL 了,直接從原始資料庫,數據工程師透過 dbt https://www.getdbt.com/ 這個服務,用 SQL 進行多層轉換。
* [只會 SQL 也能成為資料工程師?用 DBT(data build tool) 解決資料團隊的缺糧危機](https://medium.com/dbt-local-taiwan/%E5%8F%AA%E6%9C%83sql%E4%B9%9F%E8%83%BD%E6%88%90%E7%82%BA%E8%B3%87%E6%96%99%E5%B7%A5%E7%A8%8B%E5%B8%AB-%E7%94%A8dbt-data-build-tool-%E8%A7%A3%E6%B1%BA%E8%B3%87%E6%96%99%E5%9C%98%E9%9A%8A%E7%9A%84%E7%BC%BA%E7%B3%A7%E5%8D%B1%E6%A9%9F-5e25c02dc41)
* [ELT方法的變革對數據驅動營運的重要性](https://tuna.mba/p/220807)
這招最大的好處就是,數據分析團隊只要很會 SQL 就可以做完全部事情,就不需要麻煩後端工程師去寫 ETL 程序了。
## 為何要轉 schema?
由於分析目的和營運不同,針對分析用的 資料庫 table 需要做個轉換
營運用的資料表注重正規化,因為需要經常寫入,並避免資料不一致。
而分析用的資料表會盡量扁平,因為才好 join、欄位超多沒關係、不用擔心資料重複,也不需要寫入資料
## BI 工具
有資料之後,就可以在上面挑一個 BI 工具來用,方便 “資料分析師” 去玩 和做圖表
BI 工具很多,付費各家都有出有很貴的,免費開源的推薦 metabase
## 底層資料庫
各家也有出針對分析用途專門的資料庫,可以處理巨量資料
例如 google bigquery 或 aws redshift 等等
不過資料量少的話,就繼續用 mysql 或 postgresql 也行
這些資料庫都支援 SQL 語法