# 1. 背景 - 產業別: 教育科技業 - 商業模式: 線上學習平台向學生提供課程 - 簡易組織架構(包含公司規模、重要的部門): 規模約 50 - 100 人 - 重要團隊: software, product & marketing team - data team 人數以及組成: Data team 由 3 位 DE 和 2 位 DA 組成 其中兩位 DA 會負責接洽 team 外的需求及做比較多 analytical engineering 的業務 另外 3 位 DE 則負責 data infra & task orchestration。 # 2. Real-time KPI Dashboard - 需求單位: Product Manager: 想要得知即時的營收、流量表現,藉此偵測潛在的產品錯誤, 可能需要被盡快修復或是擴張運算。 - 提出需求的原因/目的/想達成的效果: - 即時查看營收表現、產品即時流量(在線、使用) - 查看剛上線的功能/剛推出的活動在不同營運區的表現 - 刷新頁面就可以看到即時的數據,不希望 loading 太久 - 可接受先實現 hourly update - 需求單位期待的交付物,或需求單位期待如何使用這個服務/產品: Dashboard 上所有 revenue / traffic charts 都能即時更新(自動/手動) - Revenue: Trend: 課程收入/date(課程單價 * 購課人數) Number: YoY, QoQ, MoM, DoD Filter: - 課程分類 - 管道(device, marketing channel) - 性別 - 區域 - 年齡 - Traffic: Funnel: count of view product, add to cart, checkout Number: 商城 HAU / DAU / MAU Number: 授課 HAU / DAU / MAU Number: 商城 Retention Number: 授課 Retention Number: 註冊率 Filter: - 課程分類 (使用者標籤) - 新註冊、已註冊 - 性別 - 區域 - 年齡 - 需求單位期待的 SLA(Service level agreement): - 95% 資料 delay < 10 分鐘(refresh 最舊能看到10分鐘以前的資料) - 圖表刷新等待時間 < 5 秒 - 這需求對於企業/組織的價值: 即時掌握資訊,確保產品沒有發生異常,避免造成任何營收損失 # 3. 資料 - 資料來源: Cloud SQL - 資料格式: Parquet - 資料量: 4 TB - 範例資料 # Source ## user : daily 200 | fullname | type | description | | ------------------- |:-------------- | -------------------- | | user_id | UNSIGN INTEGER | 使用者ID | | user_regiser_source | STRING | 使用者註冊來源 | | username | STRING | 使用者名稱 | | gender | STRING | 性別 | | region | STRING | | | birthday | DATE | 生日 | | joined_time | TIMESTAMP | 使用者創建帳號時間 | | last_login_time_TW | TIMESTAMP | 最後一次登入台灣時間 | | last_login_date_TW | DATE | 最後一次登入台灣日期 | | first_active_date | DATE | 第一次使用日期 | | last_active_date | DATE | 最後一次使用日期 | ## order : daily 500 | fullname | type | description | | ----------- | -------------- | ----------- | | id | UNSIGN INTEGER | | | user_id | UNSIGN INTEGER | | | course_list | JSON | | | total_price | INTEGER | | ## course : monthly 10 | fullname | type | description | | ------------- | -------------- | ----------- | | id | UNSIGN INTEGER | | | name | STRING | | | price | UNSIGN INTEGER | | | category | STRING | | | launched_time | TIMESTAMP | | ## user_activity : hourly 5000 / daily 120,000 (轉單率才 0.4% 好哭喔) | fullname | type | description | | -------------- | -------------- | ----------- | | id | UNSIGN INTEGER | | | user_id | UNSIGN INTEGER | | | event_category | STRING | | | event_label | STRING | | | event_action | STRING | | | utm | JSON | | | c_time | DATETIME | | # Dervied Data ## UserLoginData | fullname | type | description | | -------------- | -------------- | ----------- | | user_id | UNSIGN INTEGER | | | date | DATE | | ## UserLoginData | fullname | type | description | | -------------- | -------------- | ----------- | | user_id | UNSIGN INTEGER | | | date | DATE | | # 4. 平台 GCP <!-- | used_day_cnt | INTEGER | 使用天數 | | used_content_cnt | INTEGER | 內容使用量 | | used_video_cnt | INTEGER | 影片使用量 | | used_exercise_cnt | INTEGER | 習題使用量 | | used_mission_cnt | INTEGER | 任務使用量 | -->