談談”取數”的那些事兒
一個公司的業務運營,不論規模大小,什么行業,都離不開數據的支撐。既然要數據,那么就得取數,誰來取數,怎么取?可能是一個銷售人員在用Excel取,可能是一個DBA從生產數據庫中查,也可能是一個數據開發人員寫SQL或者寫程序從數據倉庫中取。
作為一個多年從事數據相關的開發者,深受“臨時數據提取”之苦,自己也是用盡十八般武藝,目的就是想盡可能的解決取數難、取數慢的問題。在此總結一下多年來對于取數的一些方法(更多是針對公司有自己的數據團隊),大概包含以下幾個方面:
- 固定報表;
- OLAP系統;
- 自助分析系統;
- 自助取數系統;
- 臨時數據提取需求;
固定報表
固定報表是最常見、最簡單的取數方式。通常是需求方在經過對數據調研之后,形成固定的數據報表需求,然后提給數據開發團隊,由數據開發團隊安排資源實施完成。報表形成后,定期更新數據,報表一般通過WEB界面(自研或者使用開源)來呈現,有些則是通過郵件(Excel)方式每天定時發送。
OLAP系統
然而需求方的數據需求并不總是固定格式的,他們希望從所有可能的維度去探索數據,因為很多時候,他們自己一開始也不知道最終想要的數據。這時候,依靠固定報表顯然無法滿足需求。
OLAP系統開始發揮他們的長處,數據開發團隊依據業務和數據,在OLAP系統中設計相應的CUBE,定期更新,而需求方則可以在OLAP系統中,基于設計好的CUBE,自己選擇需要查詢的維度、指標、條件等等,進行探索分析查詢。
一個比較好的OLAP系統需要依賴以下方面:規整的數據倉庫模型(事實表、維度表),不錯的OLAP引擎,Nice的OLAP前端工具。
自助分析系統
為了進一步減少數據開發的工作量,讓需求方能更加自助和自主的去完成一些取數。用戶可以自己上傳Excel、文本,接入數據倉庫數據,接入自己數據庫數據,自助建模(相當于定義Cube),然后來探索分析數據。
另外,該系統也適用于那些沒有數據開發團隊的小公司。
自助取數系統
慢慢的,又遇到問題了。OLAP系統和自助分析系統,都需要定義CUBE,而CUBE對數據模型(事實表,維度表)有一定的要求。對于一些數據需求,很難固化成數據模型去支持查詢。
剛開始,直接提供SQL接口讓需求方去提交SQL去查,但問題是他們不太會SQL,即使會,提交過來的SQL執行性能很有問題。因此,我想增加一種功能,讓需求方只去操作界面,后臺根據界面操作,轉換成SQL去執行。這個問題看似簡單,但是我想做的更靈活簡單一些。
數據開發人員去配置一個自助取數模板,這個模板核心由一段SQL和一些變量組成。
變量有三種類型:維度、指標和常量。
數據開發人員定義好模板后,需求方可以在自助取數任務頁面使用模板,提交取數任務。
在取數任務頁面,常量是必填字段,維度和指標可以隨意組合選擇,也可以增加過濾條件。選擇好后,由后臺根據任務條件,替換模板中的變量,生成SQL,產生結果供下載。
這個過程,更像是一個動態虛擬CUBE,雖然離線運行SQL并生成結果需要一段時間,但靈活性更好,也收到了比較好的效果。
臨時數據提取需求
盡管為了滿足取數需求,減少數據開發工作量,我們做了上面很多的努力,但仍然有小部分的需求,需要由數據開發人員來完成。
其實依靠平臺化、系統化、自動化去解決80-90%的數據需求,已經非常不錯了。